linux - 如何重新排序 HTTP header ?

标签 linux nginx http-headers mitmproxy

我想知道在被发送回网络服务器之前,是否有任何方法可以重新排序由我们的浏览器发送的 HTTP header

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

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

我乐于接受建议。也许 NGINX 也可以来拯救?

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

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

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

如何做到这一点?

最佳答案

郑重声明,根据 RFC 7230,HTTP header 的顺序应该根本不重要.但是既然你问了......这可以在 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)

关于linux - 如何重新排序 HTTP header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37341273/

相关文章:

linux - 自己写 'everything is a file'接口(interface)

Java 访问控制异常 : keeping getting File IO error when trying to write log file

c# - 使用 RestSharp 设置 'Content-Type' header

linux - 在 linux 中使用绝对路径递归列出文件

linux - Linux 系统上 Azure Log Analytics 代理的代理设置

apache - 具有使用自定义 session 端点的连接池的反向代理?

javascript - 防止通过 file_get_contents 执行 javascript

nginx - kubernetes nginx-ingress始终重定向到404默认backen忽略路径规则

php - 使用 curl 在 PHP 中获取 HTTP 代码

php - 从 PHP 中的当前请求中获取 http header