【问题标题】:How to avoid HTTP Header Injection (new lines characters) [duplicate]如何避免 HTTP 标头注入(换行符)
【发布时间】:2012-07-06 23:15:19
【问题描述】:

我有时在 php 函数 header 中使用用户数据,如下所示:

header('Location : test' . $user_data);

我曾经删除 \n\r 以防止标头注入,但还有其他换行符吗?我在我的例子中写了Location,但它可以是别的东西,我知道我必须验证和清理 URL,我的问题是关于标题中的新行。

【问题讨论】:

  • 顺便说一下,Location: 标头必须是绝对 URL(即它必须从 http:// 或您要使用的任何协议开始)
  • 相对的 Location: 标头,尽管违反 RFC,但几乎可以在所有浏览器中正常工作。
  • 我不明白:header('Location: test.php'); 似乎可以工作(我刚刚尝试过),我可以使用相对 URL(PHP/Apache)
  • @raina77ow:谢谢!我没有注意到这一点。 PHP 发送警告(我刚试过),并没有进行重定向。
  • rap-2-h,仅仅因为相对路径适用于您的浏览器并不意味着它们将适用于任何地方(网络浏览器不是浏览网络的唯一应用程序[例如搜索引擎机器人]) .

标签: php security http-headers code-injection


【解决方案1】:

引用the doc:

(自 4.4.2 和 5.1.2 起)此功能现在可以防止多个 标头立即发送以防止标头注入 攻击。

所以我想即使你已经做过的 CRLF 替换也没有必要。

【讨论】:

  • (假设正在使用 >4.4.2 或 >5.1.2。)
  • 是的,但是你接着说“所以我想即使你已经做过的 CRLF 替换也没有必要。”这是做出这样的假设,所以如果有人跳过引用,他们会假设他们也不必这样做(人们不阅读哈哈)。
  • 谢谢!我没有注意到这一点。 PHP 发送警告(我刚刚尝试过),并且没有进行重定向(但我的问题仍然有效,因为我的应用程序与 PHP 5.1.X 兼容,所以我现在无法接受您的回复(也许稍后,我现在投票 +1))
  • 我知道它很旧,但我今天(2017 年 1 月 6 日)才发现,使用 PHP 5.2.17,PHP 只允许使用 CR 的多行标题(\r,ASCII 13,%0D) , 不幸的是它被 Chrome 浏览器视为一个新行,允许标头注入。我希望它对查看此页面的人有用。
猜你喜欢
  • 1970-01-01
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-24
相关资源
最近更新 更多