3

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

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

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

我愿意接受建议。也许 NGINX 也可能会来救援?

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

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

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

如何才能做到这一点?

4

1 回答 1

0

作为记录,根据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)
于 2016-05-20T16:39:52.320 回答