【问题标题】:sha1 and MD5 secure enough for cookie? [closed]sha1 和 MD5 对 cookie 足够安全吗? [关闭]
【发布时间】:2014-09-17 21:20:00
【问题描述】:

所以我正在尝试进行自动登录,这样用户就不必每次都登录。为了做到这一点,我正在生成一个密钥,使用

sha1(uniqid($user, true)).md5(uniqid())

现在我的问题是,这足够安全吗?它返回类似这样的内容

53495c810be8f24f141e478ccd9732f895dc10f6c0fe68391c482012297935c4b30ab12b   

看起来很漂亮,很安全。但真的是这样吗?任何帮助都会很棒。

【问题讨论】:

  • 该方法不安全,与选择的无关。如果您使用这样的“自动登录”,那么您就是信任以前保存的客户端数据,无论它看起来多么随机都无关紧要。 (会话 cookie 确实使用随机数,但这是在会话中持续存在,而不是自动登录。)
  • 所以你是说不要使用自动登录?如果它不安全,为什么几乎每个网站都这样做? @user2864740
  • 不,大多数网站没有有“自动登录”功能。大多数站点使用 cookie 进行会话(通常包含随机数并保留一段时间)。大多数浏览器都支持记住密码。此外,根据 uniqid 的文档,它甚至不适合 nonce:“此函数不会创建随机或不可预测的字符串。此函数不得用于安全目的。使用加密安全随机函数/生成器和加密安全哈希用于创建不可预测的安全 ID 的函数。”
  • PHP 已经支持足够的会话支持并自动处理随机数生成。见start_session
  • PHP can be configured with a different session cookie_lifetime - 例如一天 - 这样会话不会在浏览器关闭时结束(这只是默认行为)。不要编造不需要存在的问题。

标签: php html cookies md5 sha1


【解决方案1】:

如果您将生成的值用作“密钥”,它作为 cookie 发送到浏览器,并且还引用服务器上从未发送到浏览器的数据,那么是的,它有点安全,但过于复杂。如果是这种情况,您不需要包含用户名。为什么不每次都让数据完全随机呢?您可以通过以下方式完成同样的事情:

sha1(uniqid())

这也有更好的性能,因为只有一种哈希算法在起作用。 MD5 不应该用于任何事情,所以除非需要严格的性能,否则我会使用 sha1。

(在编辑 #1 中添加)如果这是您正在做的事情,那么当您将身份验证记录存储在数据库中时,您应该跟踪它的创建时间,并强制它只在特定的时间存在寿命。提供“无限身份验证”机制总是不安全的,而提供有时间限制的身份验证方案是一种对冲赌注,我们每天都在使用这种方案,浏览器中的 cookie 会随着时间在服务器上过期>,因此即使攻击者稍后知道 cookie 的值,也无法在预定时间段之外访问服务器上的资源。

但是,如果您尝试将用户名和密码作为哈希值存储在 cookie 中,那么这种方法非常不安全。如果我是攻击者并且我知道其中的计划,我可以暴力破解哈希以生成所涉及的用户名和密码。这需要时间,但非常可行。作为开发人员,您选择什么样的哈希“组合”并不重要。事实上,为了使其“更安全”而尝试组合加密解决方案的次数越多,可能会降低系统的安全性。

【讨论】:

  • 我要做的就是生成一个密钥。将其设置为 cookie。将其存储在数据库中。然后,当用户访问页面时,如果 cookie 与密钥匹配,他们将登录到与密钥关联的帐户。够安全吗?
  • 干杯!我添加了一个部分,讨论创建长期身份验证令牌时应采取的预防措施。这有帮助吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-07
  • 2013-05-18
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多