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';

更新:パスワードをソルトしましたが、それでも同じ結果が得られます。(sed で exec を使用する以外に、これを行うためのより良い方法があるかどうかも疑問に思っています。)

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 に答える