php表单使用sed和exec更改sha1密码


php form change sha1 password with sed and exec

我正在处理一个简单的密码重置表单,多亏了这里的大量帮助,我有了一些工作。然而,我想添加一个转折点,并将重置密码保存在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';

更新:我修改了密码,但仍然得到了相同的结果。(我还想知道,除了在sed中使用exec之外,是否还有更好的方法可以做到这一点?)

好的,我仔细看了一下,发现了一些值得您考虑的事情。

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

撒盐是一件好事,有助于让你的密码更难破解。可选的(也是推荐的)是生成随机盐,并将其附加到您的密码中,以增加强度,以及其他好处。只需记住,将来在身份验证期间再次哈希密码时,请将您的salt包括在内。

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

<?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>

希望这能帮助你!