【问题标题】:is $_SERVER['HTTP_REFERER'] safe?$_SERVER['HTTP_REFERER'] 安全吗?
【发布时间】:2011-05-09 09:07:36
【问题描述】:

我正在使用 $_SERVER['HTTP_REFERER'] 生成动态反向链接。

<a href="<?php echo $_SERVER['HTTP_REFERER'] ?>">Return to..blah</a>

这样做是否合理安全?

【问题讨论】:

  • 安全如防止 XSS 攻击,还是安全如“将始终包含有效值”?
  • REFERER 并不总是存在,因此您的方法在某些情况下不起作用。

标签: php security


【解决方案1】:

不是这样的。

它可能不存在。 (可能是错误的,一些个人防火墙包出于隐私原因混淆了referer,一路违反了HTTP规范)

您应该通过htmlspecialchars 运行来自系统外部的任何内容以防止 XSS 攻击(尽管 IIRC,引用者中不应包含任何危险字符,因为它们应该是 URL 安全的,您应该养成始终谨慎)。

虽然浏览器带有后退按钮,但没有必要尝试复制它们的功能(尤其是当用户点击标记为“后退”的链接时,它不会将它们带回到他们的历史记录中,所以点击正常的后退按钮在概念上会将它们向前移动)。

【讨论】:

  • 它可能根本没有设置,不仅仅是空白。
【解决方案2】:

它可能是安全的,但它不可靠:由于HTTP specHTTP_REFERER 是可选的(有些客户端根本不发送此标头,有些“安全”软件将其从任何 HTTP 请求中去除),并且有多种方法可以修改此标头。有些浏览器发送引用页面,有些发送一个空白字符串,有些根本不发送这个,有些可能发送虚假数据,有些可能发送玛蒂尔达阿姨;而且,您无法判断您是否在此标头中获取了有效数据。

所以,不,我永远不会相信 HTTP_REFERER 包含上一页,你也不应该。

【讨论】:

  • +1 我已经多次将最后一个 HTML 请求页面中引用的第一个文件设置为引用者,通常是 favicon.ico 或 css 文件。这发生在 Firefox 和 Chrome 中。
【解决方案3】:

不是。 它可能未设置、不需要甚至不安全。

考虑以下几点:

  1. 用户输入您的网址并点击。不会有推荐人。不仅您的后退按钮不起作用,您还会收到通知错误。
  2. 访问者来自您产品页面上的外部来源(比如说 google)。你想把你的访问者送回谷歌吗?我不这么认为。
  3. 标题可以修改,我会仔细检查它,或者根本不使用它。

【讨论】:

    猜你喜欢
    • 2012-09-27
    • 1970-01-01
    • 2021-03-12
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 2023-03-31
    • 2012-04-13
    相关资源
    最近更新 更多