【问题标题】:Header names with underscores ignored in php 5.5.1 / apache 2.4.6在 php 5.5.1 / apache 2.4.6 中忽略带有下划线的标题名称
【发布时间】:2013-08-13 16:02:54
【问题描述】:

升级到 php 5.5.1 和 apache 2.4.6 后,检查某些标头现在已损坏(特别是检查 HTTP_X_REQUESTED_WITH)。

通过进一步的测试,我注意到任何包含下划线的自定义标头都会被忽略(我的意思是它不会出现在 PHP 的 $_SERVER 数组中)。因此,如果我添加一个名为my-header 的标头,它会以$_SERVER['HTTP_MY_HEADER'] 的形式提供,但如果我尝试添加一个标头my_header,它在$_SERVER 中将不可用。

【问题讨论】:

  • 由于你使用的是Apache,所以你在使用apache_request_headers时得到正确的headers
  • @FDL 是的,我确实使用 apache_request_headers 获得了正确的标头
  • 应该在发布之前进行研究...这是 apache 2.4 中记录的功能:“将标头转换为环境变量比以前更严格,以通过以下方式减轻一些可能的跨站点脚本攻击标头注入。包含无效字符(包括下划线)的标头现在被静默删除。 - httpd.apache.org/docs/trunk/new_features_2_4.html
  • 很好的发现,您应该将其添加为答案并接受它,以便其他人将来可以从中受益。

标签: php apache http-headers


【解决方案1】:

这是 apache 2.4 中记录的功能。见httpd.apache.org/docs/trunk/new_features_2_4.html

将标头转换为环境变量比 在通过以下方式减轻一些可能的跨站点脚本攻击之前 标头注入。包含无效字符的标头(包括 下划线)现在被静默删除。

【讨论】:

  • 你如何绕过这个“功能”?
  • 只需将 _ 替换为 - : "custom_api_key" --> "custom-api-key"
  • 如果(像我一样)您遇到无法修改的旧界面,文档解释了一种解决方法:httpd.apache.org/docs/trunk/env.html#fixheader
  • Pavle 我正在疯狂寻找我不工作的原因,你救了我的命,谢谢。
猜你喜欢
  • 2015-12-15
  • 2018-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多