开发安全的PHP登录和身份验证策略

Phi*_*ton 8 php security authentication cookies session

我正在为一个新的PHP站点开发一个登录和身份验证系统,并且已经阅读了各种攻击和漏洞.但是,它有点令人困惑,所以我想检查一下我的方法是否有意义.

我计划存储以下数据:

  • 在会话中: user-id,hashed + saltedHTTP_USER_AGENT

  • 在cookie和数据库中:随机令牌,散列+盐渍标识符

在每个页面上,我计划执行以下操作:

  1. 如果存在会话,请使用该进程进行身份验证.检查是否HTTP_USER_AGENT与存储的会话中的匹配.

  2. 如果不存在会话,请使用cookie进行身份验证.检查cookie中的标记和标识符是否与数据库中的标记和标识符匹配.

  3. 如果cookie无效或不存在,请要求用户登录.

这有什么明显的缺陷吗?只要我在cookie中设置超时,我应该相当安全,对吧?有什么我想念的吗?

提前谢谢了.

Woo*_*kai 12

一些随意的想法:

  1. 如果我窃取您的某个用户的cookie(通过在您的网站中注入一些JS代码使用XSS攻击)该怎么办?然后我将落入案例2.因此能够登录.恕我直言,如果你想要一个真正安全的身份验证,不要使用"记住我"类型的cookie来存储用户凭据.
  2. 如果您将凭据存储在cookie中,请不要将密码存储为明文.
  3. 检查HTTP_USER_AGENT是阻止会话劫持的第一步,但也许你可以将它与IP地址结合起来?与目标相比,在同一台主机上要比使用相同的浏览器困难得多.

但无论如何,感谢您花时间考虑良好的身份验证方案.很多PHP开发人员都没有.

编辑:为了记录,让我在这里澄清一点:在这个幻想中有两个饼干.一个由PHP自动设置以传播会话ID(有时,我们看到网站将其放入URL,例如www.example.com/page.php?sessionId = [...]),第二个由您创建为了存储用户凭据并在会话丢失时对其进行身份验证.XSS攻击适用于两者,即攻击者可以窃取会话cookie并劫持会话(具有有限的生命周期),或者窃取凭证cookie并在以后进行身份验证.

  • 我在哪里说用户代理不能被欺骗?而不是侮辱他人,发表基本无用的评论并推广一些随机项目(我怀疑你可能已经写过),为什么不链接到像http://www.owasp.org这样的东西呢?对OP有用吗? (2认同)