现在,当用户注册时,他们的密码被散列并存储,他们的id被存储为主键,默认情况下,字段email_activation中的单元被枚举为“no”。然后,他们会收到一封电子邮件,点击以下链接即可激活他们的帐户。
http://website.com/activation.php?id=1&pass=23a000e03e9116c958dh923542
点击链接后,运行以下脚本
$id= $_GET['id'];
$hashPass= $_GET['pass'];
mysql_query("UPDATE members SET email_activation='yes' WHERE members_id='$id' AND members_password='$hashPass'")
考虑到他们的哈希传递是URL的一部分(假设适当的字符串卫生等等),这似乎是一种激活某人帐户的安全方式吗?
答案 0 :(得分:3)
没有。使用单独的字段来包含激活哈希,并将哈希基于多个事物(用户名,密码哈希,时间等)。
答案 1 :(得分:2)
没有必要在链接中输入密码(散列或不散列)(不,你不应该这样做)。
在数据库中存储不同的随机值 密码,然后将该随机值放入链接中。 (见:http://en.wikipedia.org/wiki/Cryptographic_nonce)
由于随机激活值仅使用一次(并且不能授予对该帐户的正常访问权限),因此可以将其放入URL中。
答案 2 :(得分:0)
这样做不是很安全,不。最好分配一个唯一的随机密钥。
答案 3 :(得分:0)
我会在你的表中创建另一个字段来激活。这样,您就不会在URL中使用密码哈希。
(我的反应不够快。)