【发布时间】: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 - 例如一天 - 这样会话不会在浏览器关闭时结束(这只是默认行为)。不要编造不需要存在的问题。