在请求标头中使用Apache Accept LF与CRLF

时间:2017-04-23 17:40:26

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

我有一个遗留产品,我试图在Apache服务器和服务器上支持,只是在最近的更新开始拒绝请求标题后才使用LF作为换行,并且由于它的年龄大小而重建它是一个很高的顺序代码库是。是否有可以使用的设置或mod_rewrite命令可以利用它来允许使用LF而不是CRLF的请求头,或者将LF重写为请求头中的CRLF?

来自app的示例标题:

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

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

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:3)

您可以在Apache面前放置某种反向代理,并将处理请求转换为Apache友好的代码。也许Varnish Cache可以工作,它也可以作为HTTP处理器或NGINX。另一个选项可能是一个小Node.js应用程序接受squiffy输入并将其转换为更好的东西,同时将它管道到后端。