Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
忘记登录-PHP问题_Php_Jquery_Html_Login_Md5 - Fatal编程技术网

忘记登录-PHP问题

忘记登录-PHP问题,php,jquery,html,login,md5,Php,Jquery,Html,Login,Md5,我有一个使用用户名和密码的登录系统 创建帐户后,用户输入其详细信息(姓名、地址、电子邮件密码等)。我需要输入密码并将其存储在数据库中 我的问题是如何实现一个忘记登录页面,并将密码设置为md5……我想创建一个自动电子邮件服务,将密码通过电子邮件发送到提供的电子邮件地址……但鉴于我从未访问过明文密码,我很难弄清楚如何实现这一点,只有加密的密码…您可以生成一个新的随机密码并通过电子邮件发送给他们。恢复密码并不实际,这也是存储哈希而不是密码的部分原因。这会降低安全漏洞的重要性。您根本不需要向用户发送旧密

我有一个使用用户名和密码的登录系统

创建帐户后,用户输入其详细信息(姓名、地址、电子邮件密码等)。我需要输入密码并将其存储在数据库中


我的问题是如何实现一个忘记登录页面,并将密码设置为md5……我想创建一个自动电子邮件服务,将密码通过电子邮件发送到提供的电子邮件地址……但鉴于我从未访问过明文密码,我很难弄清楚如何实现这一点,只有加密的密码…

您可以生成一个新的随机密码并通过电子邮件发送给他们。恢复密码并不实际,这也是存储哈希而不是密码的部分原因。这会降低安全漏洞的重要性。

您根本不需要向用户发送旧密码


您可能可以发送一次身份验证链接(用户无需密码登录)或只发送新生成的密码。

您不需要通过电子邮件向用户发送密码。您通常会通过电子邮件向他们发送一个新的自动生成的临时密码。

您会注意到,大多数(信誉良好的!)网站只允许您重置密码,而不允许您使用旧密码


这就是为什么。:)

使用md5密码时,几乎不可能获得明文密码。您需要做的是“重置”密码:将其设置为其他密码,然后通过电子邮件发送给用户

发送包含用户密码的电子邮件是一种不好的做法(而且一旦密码被md5'ed,这几乎是不可能的)。一种选择是:

获取用户的电子邮件并发送电子邮件链接,允许用户更改密码。链接应该存储在另一个DB表中,并且应该具有某种与之相关联的长唯一id。请求链接时,显示更改密码的表单。然后,
md5()
输入新密码并替换数据库中的用户密码

if($_POST['submit'] == 'Send Reset Password Link') {
    if(//User exists & email is valid (check mysql)) {
        $db->prepare('INSERT INTO reset VALUES('', :email, :linkid)');
        //etc...
        mail($email, 'Password Reset for myawesomesite.com', 'Here is your link: http://www.myawesomesite.com/reset.php?id='.$linkid.'&email='.urlencode($email));
        echo "Email sent";
    }
}
reset.php:

if(isset($_GET['id']) && isset($_GET['email'])) {
    $q = $db->prepare('SELECT id FROM reset WHERE email=:email AND linkid=:linkid');
    $q->bindParam(':email', $_GET['email']);
    $q->bindParam(':linkid', $_GET['id']);
    $q->execute();

    if($q->rowCount() == 1) {
        //Show password reset form
    } else {
        echo "Reset link invalid";
    }
}
然后您可以使用
updateusers,其中email=''SET password=''

编辑
我建议不要向用户发送临时密码,除非您的忘记密码表单具有用户电子邮件之外的安全层。如果没有,任何知道用户电子邮件的人都可以重置密码。此外,电子邮件通常是未加密的,并且我认为通过电子邮件发送密码(临时或不)是不安全的。

< P>这里有一些选项:

  • 在注册过程中,您可以要求用户设置一些“秘密问题和答案”

    • 当用户初始化重置密码功能时,他可以回答这些问题并重置密码
    • 或者,在正确回答问题后,您可以通过电子邮件向他发送新的临时密码
  • 你可以通过电子邮件向他们发送一个特殊链接。单击此链接后,他们可以设置新密码


您是否对密码进行了加密?用户:如果你还不知道盐渍,你可能不应该写一个安全系统。可笑,奥利。“如果你不知道量子密码,你甚至不应该费心保护你的业余php应用程序,因为没有人会使用它。”检查缓冲区大小等也没有实际意义。@Oli公平地说,他/她正在从中学习。如果你从来没有尝试过,你肯定无法从中学习。我同意如果OP写的是amazon.com,但他们显然只是在学习,而且非常棒——指出盐渍,不要建议举手退休。