让 Apache 在请求中接受 LF 与 CRLF Headers

Have Apache Accept LF vs CRLF in Request Headers

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

示例 header 来自应用:

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

如果我对文件进行十六进制编辑以将 \n 更改为 \r\n,它可以工作,但是不需要十六进制编辑文件以作为更新发布,我正在尝试查找server-side 让 Apache 停止自己在 LF 上的阻塞。在此先感谢您对此问题的任何帮助!

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

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

These defects are addressed with the release of Apache HTTP Server 2.4.25 and coordinated by a new directive;

HttpProtocolOptions Strict

which is the default behavior of 2.4.25 and later. By toggling from 'Strict' behavior to 'Unsafe' behavior, some of the restrictions may be relaxed to allow some invalid HTTP/1.1 clients to communicate with the server, but this will reintroduce the possibility of the problems described in this assessment. Note that relaxing the behavior to 'Unsafe' will still not permit raw CTLs other than HTAB (where permitted), but will allow other RFC requirements to not be enforced, such as exactly two SP characters in the request line.

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

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