【问题标题】:What is the proper way to to activate an account via $_GET?通过 $_GET 激活帐户的正确方法是什么?
【发布时间】:2011-10-14 16:25:31
【问题描述】:

所以现在当用户注册时,他们的密码被散列并存储,他们的 id 被存储为主键,并且字段 email_activation 中的单元格默认枚举为“否”。然后他们会收到一封电子邮件,点击下面的链接可以激活他们的帐户。

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 的一部分(假设对字符串进行了适当的清理等...),这似乎是一种激活某人帐户的安全方法吗?

【问题讨论】:

    标签: php mysql hash passwords get


    【解决方案1】:

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

    【讨论】:

    • 感谢您的及时回复,会的。所以一般来说,在 URL 中包含激活哈希是可以的?
    • 没关系,只要激活码不是可以多次使用才能访问帐户的东西。 (最好的系统甚至不让您直接访问;它们仍然要求您在激活后登录。)
    【解决方案2】:

    无需在链接中输入密码(无论是否经过哈希处理)(不,您不应该这样做)。

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

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

    【讨论】:

    • 感谢 Amber,我喜欢将激活基于注册帐户时分配的随机值的想法。
    • 其实可以推荐一个php中生成随机长度的随机字母数字字符串的函数吗?
    • 您可以根据rand()mt_rand() 自己写一个。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      我会在您的表中创建另一个字段以用于激活。这样您就不会在 URL 中包含密码哈希。

      (我的反应不够快。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-27
        • 1970-01-01
        • 2019-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多