Php 在cookie中存储登录信息

Php 在cookie中存储登录信息,php,cookies,Php,Cookies,我想在浏览器cookie中保存用户的身份验证信息,以便持久登录。正如他们所说,在cookie中存储任何机密信息(如密码)都是不安全的,但为了拥有“记住密码”之类的选项,我认为没有其他选择 因此,如果用户想要记住他的登录信息,如果我存储用户名(电子邮件)+不是密码,而是一些其他唯一的信息,比如cookie中的哈希DB ID。然后我应该检查存储在cookie中的散列ID是否与存储在cookie中的用户电子邮件相匹配。 我认为任何人都可以很容易地看到存储在浏览器中的cookies(例如在Firefox

我想在浏览器cookie中保存用户的身份验证信息,以便持久登录。正如他们所说,在cookie中存储任何机密信息(如密码)都是不安全的,但为了拥有“记住密码”之类的选项,我认为没有其他选择

因此,如果用户想要记住他的登录信息,如果我存储用户名(电子邮件)+不是密码,而是一些其他唯一的信息,比如cookie中的哈希DB ID。然后我应该检查存储在cookie中的散列ID是否与存储在cookie中的用户电子邮件相匹配。 我认为任何人都可以很容易地看到存储在浏览器中的cookies(例如在Firefox中,Options->cookies)

那么,这会不会像某人从保存cookie的计算机上读取cookie一样弱,然后在另一台计算机上设置cookie并使用该信息登录?(因为脚本将检查存储的电子邮件和哈希id与数据库是否匹配)

在不将其他信息(如会话id等)存储在数据库中的情况下,是否可以稍微改进这种方法?
谢谢

我建议在服务器上使用唯一密钥加密用户名(在本例中为电子邮件),并将其存储在auth cookie中。如果cookie被篡改,它将无法被删除,并导致登录失败

如果将身份验证cookie复制(通过手动设置cookie或通过XSS)到另一台计算机(或另一个浏览器),则用户也将登录到新计算机。您可以考虑添加一些关于计算机的独特信息(如IP地址)来减少这种风险。 这是对.NET中auth Cookie的一种解释,但我认为这个概念也适用于php:

在客户端存储用户信息时,您没有太多选择

您可以尝试使用客户端IP作为密钥进行加密。 这样,即使cookie被复制到黑客的计算机上,并且如果他没有注意到IP是加密的密钥,你也会对用户的信息进行一些保护

Facebook就是这样做的,证明每次你试图从另一个连接点登录时,你都必须通过用户验证系统


因此,寻找一些可逆的加密,这将使你的一天;)

有一篇关于如何使“记住我”cookies更安全的文章:

我已经在PHP库中实现了文章中描述的方法:,也许您可以将其作为参考

会话固定和cookie窃取在网络时代是一个真正的问题。唯一的防御措施是使用SSL保护您的站点并监视XSS漏洞

另一种提高安全性的方法是记住用户是否使用“记住我”cookie登录,并在他执行诸如订购或更改登录凭据之类的“危险”操作时强制他重新验证


有关更多资源,请参阅以下问题:

您还可以安装带有用户ID的cookie和带有过期时间戳的SessionID。 然后,如果您将cookie绑定到IP或主机名(或者更喜欢两者),那么您就可以避免cookie窃取者和其他东西

我认为没有其他选择

再想想

为了维护会话,不需要在客户端存储密码。“记住我”的操作是一样的-使用一个随机值,它是服务器上保存的数据的查找键


除了使用带有密码短语的客户端证书外,任何使事情复杂化的操作都不会提高安全性,而且更可能暴露客户的私人数据。

还有另一种选择

对于每个用户,在登录并请求记住时,创建一个长的随机字符串

将此字符串与用户ID一起存储在您提供给用户的cookie中。
在数据库中存储一个经过适当腌制的字符串散列

如果用户提供“记住我”cookie,则将随机字符串与数据库中的哈希验证器相匹配(就像它包含密码一样)

如果匹配->登录用户并为他们创建一个新的“记住我”cookie。

如果不匹配->请求用户名和密码。

我在同一个问题上写了一个答案-看一下。

你可能想考虑的一种方法是简单地将用户ID存储在Cookie中,但也有一个非持久认证的Cookie。具有ID cookie但没有经过身份验证的cookie的用户可以浏览您的系统,但在他们第一次尝试进行更改时会提示输入密码。如果密码正确,则会设置经过身份验证的cookie,并且不会再次询问用户。由于cookie是非持久性的,身份验证将只持续到会话结束。@GordonM,谢谢,我认为amazon.com也有同样的方法。我很想知道,如果你访问cookie,比如说email+和一些散列信息,那么在浏览器中设置这些cookie对你来说有多困难?我会在cookie中存储很少的内容。持久性ID cookie将只使用相关用户的ID,而非持久性身份验证cookie将为true或false。尽量避免在cookie中存储比完成任务绝对必要的更多的信息,就好像你只发送一个身份证,这是窥探黑客必须要做的事情,而如果你发送额外的信息,可能会给黑客更多关于如何攻击你的系统的线索。通过模糊的安全性根本就不安全。不幸的是,第一篇链接文章中提出的改进并没有改善任何东西。但遗憾的是,他们错了。评论框中没有足够的空间来详细解释。关于它的一些讨论在fishbowl的文章下面,也在对的评论中。如果黑客将cookie复制到他的浏览器中,并试图在真正用户之前登录,该怎么办?