【问题标题】:Sending secure temporary password发送安全临时密码
【发布时间】:2011-12-12 12:33:31
【问题描述】:

我正在创建一个忘记密码的页面,并将通过电子邮件将临时密码发送给用户,以便他们可以登录并重置密码。

创建密码时应该注意什么,最好的方法是什么。

我的一个想法是这样的:$temporarypassword = sha1($_SERVER['REMOTE_ADDR'])

试图只允许他们从他们请求临时密码的 IP 地址登录。最好的方法是什么??

到目前为止的代码:

      if(strpos($_SERVER['HTTP_REFERER'],'domain.com') && ($_POST['forgotpasstoken'] == sha1($_SESSION['token'].'forgotpassword'))){
        if(isset($_POST['forgotemail']) && !empty($_POST['forgotemail'])){
            $email = mysql_escape_string(trim($_POST['forgotemail']));

            if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE){
                echo '<div class="error">Please enter a valid email address.</div>';
            } else {
                $sql = "SELECT email FROM users WHERE email = '$email' LIMIT 1";
                            $res = mysql_query($sql) or die(mysql_error());
                                if (mysql_num_rows($res) > 0) {

                                    //If email/user exists
            $temporarypassword = sha1($_SERVER['REMOTE_ADDR'])  
                //EMAIL PASSWORD HERE           

        echo '<div class="success">A temporary recovery password has been emailed to you.</div>';
                                    //If email/user exits
                                } else {
                                    echo '<div class="error">This email is not registered.</div>';
                        }
            }

        } else {
        echo '<div class="error">Please enter an email address.</div>'; 
        }

}

【问题讨论】:

  • 我不建议这样做。 IP可以更改,该人可以在重置IP或其他任何内容后收到邮件。我建议使用完全随机的密码,它只能在很短的时间内使用。不要忘记通知用户。

标签: php security email login passwords


【解决方案1】:

只使用一个随机字符串:用户很可能尝试从例如iPhone 失败了,请求一个新密码,并且只有当他在他的家用电脑上时才打开链接。 IP不同,设备不同,一切都不一样。

【讨论】:

    【解决方案2】:

    如果您通过电子邮件发送密码,则无法确保其完全安全。电子邮件以纯文本形式传输。就像 alf 所说的,用户可以从不同于他们请求的 IP 地址重置密码。

    一种选择是创建一个随机字符串,然后在密码重置页面上显示一半(在发出重置请求后),在电子邮件中显示一半字符串。然后要求用户在让他们选择新密码之前在表单中输入两半。

    【讨论】:

    • 现在这个 half+half(或任何可能的变化)真的是一个聪明的主意!为什么我以前没有听说过?
    猜你喜欢
    • 2016-08-18
    • 2018-03-13
    • 2013-12-15
    • 2010-11-21
    • 1970-01-01
    • 2011-11-07
    • 2010-12-07
    • 2011-04-29
    • 2011-03-22
    相关资源
    最近更新 更多