0

我正在制作一个简单的密码重置表单,多亏了这里的大量帮助,我有了一些工作。但是,我想添加一个转折并将重置密码保存在 sha1 中。这是我的代码:

#password file
$password='something';

<?php

// Change password

$rawPassword = (isset($_REQUEST["change_pwd"]));
$salt = "lgv932q2e9dshufkdjgf927gf8hlo082";
$newpass = sha1($salt . $rawPassword);


  $change_pass = exec('sed -i " . escapeshellarg("s/\$password=.*/\$password=\'$newpass\'/g")." include/conf.php');

  echo "$change_pass";

?>

<form method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <input type="text" name="change_pwd" maxlength="41">
    <input type="submit" name="Submit" value="Submit" />
</form>

当我提交新密码时,它没有正确更改文件中的 sha1 密码。而是每次将密码值更改为:

$password='356a192b7913b04c54574d18c28d46e6395428ab';

更新:我加盐了密码,我仍然得到相同的结果。(我也想知道除了使用 exec 和 sed 之外是否有更好的方法来做到这一点?)

4

1 回答 1

1

好的,所以我仔细研究了一下,发现了一些供您考虑的事情。

我要做的第一件事可能是使用 POST 作为表单方法,然后在 PHP 中的 $_POST 数组中捕获数据。您的 PHP 标记之外似乎还有一个变量,它将作为原始文本在其所在的上下文中输出到浏览器。

加盐是一件好事,有助于使您的密码更难破解。可选(并且推荐)是生成随机盐并将它们附加到您的密码以增加强度,以及其他好处。请记住,将来在身份验证期间再次对密码进行哈希处理时,请包含您的盐。

无论是否使用相同的密码,以下代码都应该适用于生成新密码哈希。

<?php

// Change password
if(isset($_POST["change_pwd"])) {
    $rawPassword = $_POST["change_pwd"]; 
    $salt = sha1(microtime()."lgv932q2e9dshufkdjgf927gf8hlo082");
    $newpass = sha1($salt . $rawPassword).$salt;
}

  $change_pass = exec('sed -i ' . escapeshellarg("s/\$password=.*/\$password=\'$newpass\'/g"). ' include/conf.php');
  //Also helpful to note that PHP halts execution until the command in exec() completes

  echo "$newpass";

?>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <input type="text" name="change_pwd" maxlength="41">
    <input type="submit" name="Submit" value="Submit" />
</form>

希望对您有所帮助!

于 2013-08-10T00:56:19.810 回答