2011-01-20 68 views
8

在时间我花了从学习PHP如何支持Unicode我一直在钻研使我的“记住我”饼干安全些休息片刻。然而,有一些我不明白的东西,还有一些我自己的想法,我想提出一些建议和意见。PHP:记住我和安全?

1)是否有采用“记住我”的功能,不涉及任何的cookie的方法?很好奇,因为存储身份验证Cookie存在明显的安全漏洞。并不是说每件事都没有安全风险。

2)因为我不跟银行或“高度敏感”信息的工作,是否有必要要求用户输入自己的密码更“高调”的领域?如果我们只是在两分钟后要求他们实质上登录,记住登录名就会很浪费。

3)什么是从“根本”)中存储的身份验证cookie(除了绝对的最佳方法是什么?我目前编码该区域以在Cookie中设置单个标记(使用time(),其用户代理,remote_addr和salt - sha256)进行散列。当所述用户回来时,它检查令牌的'会话'表,然后将IP与IP相匹配以登录它们。如果令牌存在但IP不匹配,则它默默取消cookie,并要求它们以如果他们没有一个。

再次感谢大家。

+0

您应该重新使用现有的验证框架只要有可能,因为它确实很复杂。例如,看一下https://github.com/delight-im/PHP-Auth您需要在客户端为您要做的事情提供持久性存储 - 因此,Cookie是理想的选择。 – caw 2016-09-21 02:51:53

回答

6
  1. 本质上没有。它需要客户端的某种存储;您无法知道客户没有Cookie(或类似HTML 5客户端存储)的身份。

  2. 这是一个权衡,你必须决定。最小值,旧密码或其他形式的确认(电子邮件?)应该被要求将其更改为新的。

  3. 你不能绝对防止饼干盗窃及后续模拟除非你加密所有通信。这是唯一的安全方法。 当然,将一个IP,用户代理等与cookie关联可能会有所帮助,但依靠加密更容易且更安全。(这里我误会了一点 - 什么是在cookie的值重要的是,它是随机的,所以你应该改变你的代方法是难以预料)

+0

1)不这么认为,但我认为它可能值得反问可能的激进想法。 ;)2)我肯定会要求旧密码来更新任何信息,如电子邮件,用户名,密码等。我主要是为了购买任何东西(它是一个游戏网站,所以用户将有这样的选择),交易其他用户,那种事情。 3)我实际上是指存储/检查系统(它按照我的初始描述工作的方式),而不是加密或不加密。 – Zydeco 2011-01-20 05:09:13