14

我有一个遗留产品,我试图在 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 上窒息。在此先感谢您对此问题的任何帮助!

4

2 回答 2

11

我们遇到了同样的问题,发现了 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指令可能是您的解决方案。我们决定不使用它。

于 2017-05-03T11:54:08.300 回答
3

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

于 2017-05-04T20:04:36.367 回答