私は、ユーザーがパスワードを変更するためのフォームを作成しようとしています。PHPアップデートパスワードフォームが機能しない
<?php
$ok=true;
if(isset($_POST['submit']))
{
$new_password = $_POST['pass1'];
$new_password2 = $_POST['pass2'];
$userid=$_SESSION['user']['id'];
if($new_password!=$new_password2){
$ok=false;
$errormessage="Passwords do not match.";
}
if($ok){
$errormessage="ok";
$salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647));
$password = hash('sha256', $new_password . $salt);
for($round = 0; $round < 65536; $round++)
{
$password = hash('sha256', $password . $salt);
}
$query = "
update users
set
password = :password,
hash = :hash
WHERE id = '$userid'";
// The parameter values
$query_params = array(
':password' => $password,
':salt' => $salt
);
try
{
// Execute the query against the database
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
//die("Failed to run query: " . $ex->getMessage());
die("update error");
}
header("Location: account.php?success");
}
}
?>
私は、ページのリロードと何が起こるフォームを送信
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title"><?php echo $errormessage;?></h3>
</div>
<div class="panel-body">
<form method="post" name="passwordchange" id="passwordchange">
<div class="row">
<div class="col-md-6">
<div class="row">
<div class="col-md-3"><label>Password</label></div>
<div class="col-md-5"><input class="form-control" name="pass1" id="pass1" type="text" required value=""></div>
</div>
</div>
<div class="col-md-6">
<div class="row">
<div class="col-md-3"><label>Confirm Password</label></div>
<div class="col-md-5"><input class="form-control" name="pass2" id="pass2" type="text" required value=""></div>
</div>
</div>
<input type="submit" class="btn btn-primary pull-right" name="submit" value="submit">
</div>
</form>
</div>
</div>
。 2つの異なるパスワードを入力すると、「パスワードが一致しません」というエラーメッセージが表示されます。
フォームがリロードされたときに奇妙な動作が発生すると、フォームのリロード後にサイトのナビゲーションが機能しなくなります。
私は、入力タイプ名、フォーム名、isset _POSTの代わりにisset _requestを使って試してみました。しかし、何も助けてくれないようです。
どうしたのですか?
編集:私はSALTとHASHを混ぜた。 Wooops ..
エラー報告と表示エラー場合は、この
を試してみてください? – Devon
あなたは本当にパスワードハッシュにあなた自身の塩を使用すべきではありません。そして、あなたは本当にPHPの[組み込み関数](http://jayblanchard.net/proper_password_hashing_with_PHP.html)を使ってパスワードセキュリティを処理すべきです。ハッシュする前に[パスワードをエスケープしない](http://codereview.stackexchange.com/questions/79668/login-with-password-hash)か、他のクレンジングメカニズムを使用してください。パスワードを変更すると、パスワードが変更され、不要な追加のコーディングが発生します。 –
エラーログを確認しましたか?貴重なエラーメッセージを出力していません。 –