在PHP中保护登录cookie数据的最佳方法是什么?

时间:2010-06-21 14:57:20

标签: php security cookies data-protection

我正在用PHP创建一个登录系统,我想知道如何最好地保护我的cookie中的用户信息字符串。我想用某种方式用密钥加密字符串?这是最好的方法吗?我对此有点新鲜。

提前致谢。

5 个答案:

答案 0 :(得分:23)

不要将敏感信息存储在Cookie中。存储会话ID哈希以将登录用户与其帐户连接。

答案 1 :(得分:4)

Aaron Harun对你有正确的答案。只要将这些数据存储在会话中,就基本上不需要加密这些数据,因为这些数据永远不会到达客户端/浏览器/用户,因为它们都是服务器端的。当您在PHP上创建会话时,它会为您处理cookie的内容,因此您不必担心这一点。在大多数情况下,不需要处理cookie。在安全性方面,处理cookie是有害的。

我已经看到一些草率的网站实际上将用户名存储在表单上的隐藏字段中,这允许任何人简单地编辑该表单的本地副本并采取他们喜欢的任何用户的操作。这似乎是一个明显的问题,但cookie并不是更好。

如果您真的认为设计自制认证系统是个好主意,则需要先设计数据库。不要存储明文密码,而是存储哈希值(如md5,sha-1等),此时为每个密码生成一个盐是没有害处的(在散列之前附加到用户密码的随机字符串,并使用密码哈希存储该盐,因为稍后您将需要它 - 这可以防止字典哈希攻击,即彩虹表。)

答案 2 :(得分:2)

您绝不应将安全信息存储在Cookie中。 Cookie以文本格式保存在用户计算机上,因此您应该永远不会在其中存储敏感信息的原因有很多:

  1. Cookie基本上是文本文件,可以由计算机上的任何人使用任何文本编辑器打开。
  2. cookie存储在用户计算机上,这意味着他没有时间限制,没有连接限制,没有处理限制,因此他可以尝试尽可能多地强制任何数据,而不必担心被禁止/禁止踢...
  3. 您应该只存储要记住的用户名或会话ID等内容。

答案 3 :(得分:0)

如果您绝对必须将信息存储在Cookie中而不是用户的会话中,请考虑使用HMAC对其进行签名。 hash_hmac函数是现代PHP版本的内置函数。

如果您要为“记住我”功能存储用户登录信息,请同时存储用户的ID和仅在数据库中可用的信息哈希值。例如,将登录名和密码一起散列并将其与用户ID一起存储在cookie中是相当安全的。如果用户更改了密码,那么他使用该方法登录的所有计算机都将失效,并且无法简单地更改cookie中的ID并仍然登录,因为用户名/密码哈希不匹配

答案 4 :(得分:0)

您可以免费获得会话!这是存储在服务器端的数据,由PHP /您自己选择的框架自动处理。您只需将数据放入会话中,该会话与存储在客户端会话中的随机UID相关联。在客户端,这是会话cookie。此ID会自动生成,您可以对行为manually进行细微处理。

数据存储客户端从不安全,没有真正的加密可用。无论如何,您将需要的会话来跟踪登录用户。如果您有大量数据,则可以使用该ID来标识来自其他数据存储(数据库,XML等)的关联数据。