【问题标题】:Have Apache Accept LF vs CRLF in Request Headers让 Apache 在请求标头中接受 LF 与 CRLF
【发布时间】:2017-04-23 17:40:26
【问题描述】:

我有一个旧产品,我试图在 Apache 服务器上支持它,并且服务器仅在最近的更新开始拒绝仅使用 LF 换行符的请求标头之后,并且重建它是一项艰巨的任务,因为它有多旧代码库是。是否有可以使用的设置或可以利用 mod_rewrite 命令来允许使用 LF 而不是 CRLF 的请求标头,或者将 LF 重写为请求标头中的 CRLF?

来自应用程序的示例标题:

Host: www.ourhostname.com:80\n
Accept-language: en\n
user_agent: Our Old Application\n
\n

如果我对文件进行十六进制编辑以将\n 更改为\r\n,它可以工作,但是不需要十六进制编辑文件以作为更新发布,我正在尝试在服务器端找到一些东西来获取Apache 停止自己对 LF 的窒息。提前感谢您对此问题的任何帮助!

【问题讨论】:

    标签: apache mod-rewrite http-headers newline rfc2616


    【解决方案1】:

    我们遇到了同样的问题,发现了 Apache 修复的漏洞:

    重要:Apache HTTP 请求解析空白缺陷 CVE-2016-8743 https://httpd.apache.org/security/vulnerabilities_24.html

    这些缺陷在 Apache HTTP Server 2.4.25 的发布中得到解决,并由新指令协调;

    HttpProtocolOptions Strict
    

    这是 2.4.25 及更高版本的默认行为。通过从“严格”行为切换到“不安全”行为,可以放宽一些限制以允许一些无效的 HTTP/1.1 客户端与服务器通信,但这将重新引入本评估中描述的问题的可能性。请注意,将行为放宽为“不安全”仍将不允许 HTAB 以外的原始 CTL(如果允许),但将允许不强制执行其他 RFC 要求,例如请求行中恰好有两个 SP 字符。

    所以,HttpProtocolOptions Unsafe 指令可能是您的解决方案。我们决定不使用它。

    【讨论】:

    • 这解决了我们的问题。不幸的是,无法使用 指令将其指定为文件以保护站点的其余部分,但它确实在 vhost 级别工作。感谢您的信息!
    【解决方案2】:

    您可以在 Apache 前面放置某种反向代理,并让该处理将请求转换为对您来说对 Apache 友好的东西。也许 Varnish Cache 可以工作,它也可以作为 HTTP 处理器或 NGINX。另一种选择可能是一个小的 Node.js 应用程序,它可以接受松散的输入并将其转换为更适合您的内容,同时将其通过管道传输到后端。

    【讨论】:

      猜你喜欢
      • 2018-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多