Php 我的持久登录方法安全吗?

Php 我的持久登录方法安全吗?,php,Php,我非常坚持用合理的安全方法在登录系统中实现“记住我”功能。以下是我目前的方法,如果它合理且安全,请建议我: 日志记录: 用户提供用于登录的电子邮件和密码(两者均有效)。。通过比较提供的电子邮件,从DB表用户获取用户\u id 生成2个随机数散列字符串:key1、key2并存储在cookie中。在DB Table COOKIES中,将key1、key2与用户id一起存储 检查登录名: 如果key1和key2都存在cookie,则验证DB Table cookies中的两个键(如果存在带有key1和

我非常坚持用合理的安全方法在登录系统中实现“记住我”功能。以下是我目前的方法,如果它合理且安全,请建议我:

日志记录:

  • 用户提供用于登录的电子邮件和密码(两者均有效)。。通过比较提供的电子邮件,从DB表用户获取用户\u id

  • 生成2个随机数散列字符串:key1、key2并存储在cookie中。在DB Table COOKIES中,将key1、key2与用户id一起存储

  • 检查登录名:

  • 如果key1和key2都存在cookie,则验证DB Table cookies中的两个键(如果存在带有key1和key2的行,则记录用户)

  • 若cookie有效,则重新生成key2并在cookie和数据库中更新它

  • 为什么重新生成密钥: 因为如果有人窃取cookie并使用该cookie登录,它将只在真正的用户登录之前工作。当真正的用户登录时,被盗的cookie将变得无效。对吧?

    为什么我需要两把钥匙: 因为如果我在cookie和数据库中存储用户id和单个密钥,并且用户希望在另一个浏览器或计算机上记住密码,那么新密钥将在数据库中更新,因此用户在早期浏览器/PC中的cookie将无效。用户将无法在多个位置记住密码


    感谢您的意见。

    考虑一下:添加第二个cookie如何使能够窃取任意cookie的用户更难作为该用户登录


    没有。你必须把它和用户可以提供的东西联系起来,但不能是同一件东西。若你们能把它和IP地址联系起来,那个就太好了。如果不是,考虑使用该第一密钥作为HMAC或其他东西来散列用户代理+用户ID。我自己还在尝试设计一个安全的登录系统,所以我可以告诉你什么肯定不起作用——这就是其中之一。

    Jay-这是昨天的同一个线程:

    答案仍然是一样的,也就是说SSL是确保人们无法嗅到您的纯文本cookie的唯一方法。如果您做出判断,表示您愿意接受cookie可能被拦截的风险,那么您的方法很好(但比必要的更复杂)


    假设您已经得出结论,SSL不是您要使用的方法,我不确定您认为拥有两个单独的cookie比一个cookie有什么好处。

    您的方案基于cookie盗窃妄想症。偷饼干的方法实际上只有三种:

  • 中间人攻击
  • 允许任意代码在站点安全上下文中运行的跨站点脚本或类似漏洞
  • 使用浏览器对机器进行物理访问
  • 出于我们的目的,我们还将恶意软件分类为物理恶意软件

    我们不要担心人身安全。如果一个用户失去了对他的机器的控制,他将会有比担心你的网站更多的问题

    让我们也不要担心XSS,盲目地假设您已经在尽全力防止它

    这就导致了MITM的攻击

    防止MITM攻击的最佳(只读)保护之一是SSL。如果您真的担心MITM,那么您应该通过SSL为整个站点提供服务


    你不需要两块自己的饼干。您只需要会话cookie和“记住我”cookie,顺便说一句,您可以将其存储在多对一表中。这防止了用户和记忆Mes之间的强制一对一关系。

    不要绑定到IP地址。这将使你的网站对任何坐在NAT(或在很多情况下是aol)后面的人毫无用处

    只有当一个cookie是接收另一个cookie的先决条件时,多个cookie才真正有用

    在网站需要登录的情况下,可以生成并分配安全会话cookie,然后在后续页面加载时重新生成该cookie(不可能对不在会话中保持相同会话状态标识符的站点执行会话固定)

    如果网站现在提示用户进行某种签出过程,那么您可能希望实现第二个cookie作为安全令牌,该令牌以某种方式链接到第一个cookie。这两种cookie都成为通过站点进行交易的先决条件,因此很难确定


    最后,您可能希望在$\u会话超级全局中执行此链接。如果你的网站有合理的流量,那么在数据库中这样做的成本会很高。这意味着每次需要操纵、启动或停止用户会话时,都需要数据库连接和任意数量的查询/删除/插入/更新。这是不可扩展的。

    只有一件事:谣传某些用户的IP地址在页面请求之间会发生变化。感谢您的回复。添加第二个cookie不会使窃取变得困难,但是它将允许在多个浏览器/PC上记住登录。例如,如果cookie中存储了一个用户id和一个密钥,我将重新生成密钥并在DB中更新。在这种情况下,用户在其他浏览器中的cookie将无法工作。@sdleihsirhc这就是为什么我说如果可以的话@您可以通过允许用户登录两次(cookie表中有两个单独的条目)来应对这种情况。