通过$ _GET激活帐户的正确方法是什么?

时间:2011-07-27 22:24:53

标签: php mysql hash passwords get

现在,当用户注册时,他们的密码被散列并存储,他们的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的一部分(假设适当的字符串卫生等等),这似乎是一种激活某人帐户的安全方式吗?

4 个答案:

答案 0 :(得分:3)

没有。使用单独的字段来包含激活哈希,并将哈希基于多个事物(用户名,密码哈希,时间等)。

答案 1 :(得分:2)

没有必要在链接中输入密码(散列或不散列)(不,你不应该这样做)。

在数据库中存储不同的随机值 密码,然后将该随机值放入链接中。 (见:http://en.wikipedia.org/wiki/Cryptographic_nonce

由于随机激活值仅使用一次(并且不能授予对该帐户的正常访问权限),因此可以将其放入URL中。

答案 2 :(得分:0)

这样做不是很安全,不。最好分配一个唯一的随机密钥。

答案 3 :(得分:0)

我会在你的表中创建另一个字段来激活。这样,您就不会在URL中使用密码哈希。

(我的反应不够快。)