我正在制作一个简单的密码重置表单,感谢我在这里提供的大量帮助。但是我想添加一个扭曲并在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之外还有更好的方法吗?)
答案 0 :(得分:1)
好的,所以我仔细看了一下,发现了一些值得考虑的事情。
我要做的第一件事可能是使用POST进行表单方法,然后在PHP中的$ _POST数组中捕获数据。您似乎还有一个PHP标记之外的变量,它将作为原始文本输出到它所在的上下文中。
Salting是一件好事,可以帮助您更好地破解密码。可选(和推荐)是生成随机盐并将它们附加到您的密码以增加强度,以及其他好处。请记住,在验证期间再次对密码进行哈希处理时,请记住将来包含盐。
以下代码应该适用于生成新密码哈希,无论是否使用相同的密码。
<?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>
希望能帮到你!