【问题标题】:Is header() safe? If not what's the best alternative?header() 安全吗?如果不是最好的选择是什么?
【发布时间】:2014-04-07 13:02:51
【问题描述】:

我正在制作一个 PHP 身份验证系统,用户需要再次登录以证明他们拥有该帐户(显然是出于安全原因)。

无论如何,一旦他们输入了正确的帐户信息,我就想重定向到一个页面,问题是使用 PHP header(Location '...') 函数是否会增加安全漏洞?

有人说黑客可以hijack header 不知道这是不是真的,因为我见过MyBB等软件使用header?

如果是,那么重定向用户最安全的方法是什么?

【问题讨论】:

  • 那么你想如何重定向...?
  • header 只有在输入正确的凭据时才会发生。我非常怀疑潜在的黑客是否可以访问它,除非帐户被盗用。
  • 好的,谢谢 ;) 我正在添加功能以尝试防止用户帐户遭到入侵,有人说黑客可能会更改 URL 路径
  • 在我的回答中需要更多信息来帮助您吗?

标签: php security location


【解决方案1】:

标题很好,黑客无法“破解”您的标题。只是永远不要使用 javascript 重定向。当您使用 javascript 重定向时,人们可以将其关闭,并且您的重定向和代码不再起作用 -> 巨大的安全漏洞。

【讨论】:

    【解决方案2】:

    标头函数本身与安全性无关。

    从您的问题中不清楚您的要求是什么,因为您混合了所有内容,因此,这里有一些指导方针

    • 可以被劫持的标头是client标头。当您发送一个服务器
    • 您需要保护的是一个destination脚本,该脚本必须使用会话变量来识别客户端。
    • 当您使用标头阻止某人访问页面时, 将是不安全的。每次您发送应该将客户端发送到不同页面的标头时,必须始终跟在 exit 后面

    【讨论】:

    • 好的,谢谢所有的回复;)我在使用 Location 标头时会小心;)
    【解决方案3】:

    如果是用户控制的 Location 标头值,则可能存在漏洞。

    例如

    关于头部注入,来自PHP doc:-

    (自 [PHP] 4.4.2 和 5.1.2 起)此功能现在可防止一次发送多个标头,以防止标头注入攻击。

    source here.

    对于未经验证的重定向或转发,假设您有一个页面 URL 和另一个 URL 作为查询字符串参数。例如

    http://www.example.com/redirect.php?url=account.php
    

    如果您的脚本盲目地重定向到account.php,那么攻击者可以通过电子邮件将 URL 以表单形式发送给他们的受害者

    http://www.example.com/redirect.php?url=http://www.evil.com
    

    或混淆为

    http://www.example.com/redirect.php?url=%68%74%74%70%3a%2f%2f%77%77%77%2e%65%76%69%6c%2e%63%6f%6d
    

    如果用户在点击之前检查了域,它似乎会转到您的www.example.com 网站并且看起来很安全,但是当页面重定向到攻击者时它不是,它可能是网络钓鱼尝试。如果他们让evil.com 看起来像example.com,那么不知情的用户可能不会注意到,直到为时已晚并且他们已经输入了他们的凭据。

    在您的情况下,Location 似乎不受用户控制,因此您不应容易受到这些攻击。但是,请确保在设置标头后调用exit,这样您就不是outputting extra unintended content that an attacker may use to their advantage

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-16
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      • 2011-11-24
      相关资源
      最近更新 更多