【问题标题】:How to re-order HTTP headers?如何重新排序 HTTP 标头?
【发布时间】:2016-09-17 09:35:00
【问题描述】:

我想知道是否有任何方法可以重新排序浏览器发送的 HTTP 标头,然后再将其发送回 Web 服务器?

由于标头的顺序会留下某种“指纹”,请参阅 this postthis post,我正在考虑使用 MITMProxy(我猜是内联脚本)来修改标头即时。这可能吗?

如何实现这一目标?
注意:我正在寻找一种可以编写脚本的方法,而不是使用像 Burp Suite 这样的图形工具的方法(尽管众所周知,Burp 能够重新排序标题)

我愿意接受建议。也许 NGINX 也能来拯救?

编辑:我应该更具体,举个例子......

假设我正在使用 Firefox。通过使用一个时髦的插件,我欺骗了我的用户代理“看起来”像一个 Chrome 浏览器。但是,如果我使用 ip-check.info 测试我的浏览器,我的浏览器的“签名”仍然是 Firefox 的,即使我的欺骗用户代理显示“Chrome”。

因此,在这种特定情况下,解决方案应该是以与 Chrome 相同的方式重新排序 HTTP 标头。

如何做到这一点?

【问题讨论】:

    标签: linux nginx http-headers mitmproxy


    【解决方案1】:

    为了记录,根据RFC 7230,HTTP 标头的顺序应该根本不重要。但是既然你已经问过了……这可以在 mitmproxy 中完成,如下所示:

    import random
    
    def request(context, flow):
        # flow.request.headers.fields is a tuple of (name, value) header tuples.
        h = list(flow.request.headers.fields)
        random.shuffle(h)
        flow.request.headers.fields = tuple(h)
    

    有关详细信息,请参阅netlib.http.Headers 上的 mitmproxy 文档。

    有很多方法可以根据需要重新排序:

    def reorder(headers, header_order=["Host","User-Agent","Accept"]):
        lines = []
        for name in header_order:  # add existing headers in the specified order
            if name in headers:
                lines.extend(headers.get_all(name))
                del headers[name]
        lines.extend(headers.fields)  # all other headers
        return lines
    request.headers.fields = reorder(request.headers)
    

    【讨论】:

    • 谢谢!但我已将我的问题编辑得更具体(如果我想完全按照我的意愿订购标题怎么办?)我猜this post 可能是一个好的开始?
    • headers.fields 只是标题列表,因为它们将通过网络发送,您可以根据需要重新排列它们。我在上面添加了一个小例子。
    • 谢谢 Maximilian,这个周末我要试试你的代码。您认为我可以将您的脚本按原样(显然是在添加更多标头之后)保存到 .py 文件中,并且可以将其“加载”到 MITMproxy 中吗?还需要什么吗? (我这么说是因为,在 Python 方面,我完全是个菜鸟)
    • NameError: name 'request' is not defined :这是我在尝试加载此迷你脚本时收到的错误消息。也许我们在这里遗漏了一些东西?我在 Python 3.5.1
    • 非常感谢您的帮助...我应该在脚本开头添加导入行还是“来自”行?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2013-02-14
    相关资源
    最近更新 更多