Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php sha1和MD5对cookie是否足够安全?_Php_Html_Cookies_Md5_Sha1 - Fatal编程技术网

Php sha1和MD5对cookie是否足够安全?

Php sha1和MD5对cookie是否足够安全?,php,html,cookies,md5,sha1,Php,Html,Cookies,Md5,Sha1,所以我尝试进行自动登录,这样用户就不必每次都登录。为了做到这一点,我生成了一个密钥 sha1(uniqid($user, true)).md5(uniqid()) 现在我的问题是,这足够安全吗?它返回类似这样的结果 53495c810be8f24f141e478ccd9732f895dc10f6c0fe68391c482012297935c4b30ab12b 看起来很安全。但真的是这样吗?任何帮助都很好。如果您将生成的值用作“密钥”,并将其作为cookie发送到浏览器,同时还引用了服务

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

sha1(uniqid($user, true)).md5(uniqid())
现在我的问题是,这足够安全吗?它返回类似这样的结果

53495c810be8f24f141e478ccd9732f895dc10f6c0fe68391c482012297935c4b30ab12b   

看起来很安全。但真的是这样吗?任何帮助都很好。

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

sha1(uniqid())

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

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


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

这种方法是不安全的,与您选择的加密解决方案无关。如果您使用这种“自动登录”,那么您就信任以前保存的客户机数据,不管它看起来多么随机。(会话cookie确实使用随机数,但这是为了在会话中保持,而不是自动登录。)那么你是说不要使用自动登录?如果不安全,为什么几乎所有的网站都这样做@用户2864740否,大多数站点没有“自动登录”。大多数站点使用cookie进行会话(通常包含nonce,并持续一段时间)。大多数浏览器都支持记住密码。此外,根据uniqid的文档,它甚至不适用于nonce:“此函数不创建随机或不可预测的字符串。此函数不得用于安全目的。使用加密安全的随机函数/生成器和加密安全的哈希函数来创建不可预测的安全ID。”PHP已经支持足够的会话支持,并自动处理nonce生成。请参阅,等等-例如一天-这样会话不会在浏览器关闭时结束(这只是默认行为)。不要编造不存在的问题。我只想生成一个密钥。将其设置为cookie。将其存储在数据库中。然后,当用户转到页面时,如果cookie与密钥匹配,他们将登录到与密钥相关联的帐户。安全吗?干杯!我添加了一节,讨论了在创建长期身份验证令牌时应采取的预防措施。这有用吗?