在 PHP 5.5.1 / Apache 2.4.6 中,下划线开头的标头名称将被忽略。

16
升级到php 5.5.1和apache 2.4.6后,检查某些标头现在已经失效(具体来说,检查HTTP_X_REQUESTED_WITH失败)。
经过进一步测试,我注意到任何包含下划线的自定义标头都会被忽略(我的意思是它不会出现在PHP的$_SERVER数组中)。因此,如果我添加一个名为my-header的标头,它将作为$_SERVER['HTTP_MY_HEADER']可用,但如果我尝试添加一个名为my_header的标头,它就不会在$_SERVER中出现。

2
由于您正在使用Apache,当使用apache_request_headers时,是否可以获取正确的标头? - naththedeveloper
1
@FDL 是的,我使用 apache_request_headers 可以获得正确的标题。 - Pavle Predic
3
发帖前应当先进行研究...这是Apache 2.4中的一个已记录功能: “将头部转换为环境变量的操作比以前更加严格,以减轻通过头部注入可能引起的某些跨站点脚本攻击。包含无效字符(包括下划线)的头部现在会被静默删除。”- https://httpd.apache.org/docs/trunk/new_features_2_4.html - Pavle Predic
不错的发现,你应该将其作为答案添加并接受,以便其他人在未来受益。 - naththedeveloper
1个回答

25

这是apache 2.4中的一个文档记录功能。请参见httpd.apache.org/docs/trunk/new_features_2_4.html

将头部信息翻译为环境变量的方式比以前更加严格,以减轻利用头部注入进行跨站脚本攻击的可能性。包含无效字符(包括下划线)的头部信息现在会被默默地删除。


3
你怎么绕过这个“特性”? - Liam W
只需将_替换为-: "custom_api_key" --> "custom-api-key" - Flo Schild
3
如果(像我一样)你被困在不能修改的旧接口中,该文档提供了一个解决方法:http://httpd.apache.org/docs/trunk/env.html#fixheader - MattMatt
Pavle,我疯了一样地找原因为什么不工作,你救了我的命,谢谢。 - Zilev av

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接