我想知道在发送回网络服务器之前是否有任何方式重新订购我们的浏览器发送的HTTP标头?
由于标题的顺序会留下某种“指纹识别”,请参阅this post和this post,我正在考虑使用 MITMProxy (使用内联脚本,我猜)即时修改标题。这可能吗?
如何实现这一目标?
注意:我正在寻找可以编写脚本的方法,而不是使用像 Burp Suite 这样的图形工具的方法(尽管已知Burp能够重新排序标题)
我愿意接受建议。也许NGINX可能也会拯救?
编辑:我应该更具体一点,举个例子......
假设我正在使用Firefox。通过使用时髦的插件,我欺骗我的用户代理“看起来”像Chrome浏览器。但是如果我用ip-check.info测试我的浏览器,我的浏览器的“签名”仍然是Firefox的一个,即使我的欺骗用户代理显示“Chrome”。
因此,在这种特定情况下,解决方案应该是以与Chrome相同的方式重新排序HTTP标头。
如何做到这一点?
答案 0 :(得分: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)