私はmysqliとphpを使用していますが、これを実行したい場合は、ユーザーが新しいパスワードを作成できるようにすることを試みています。
ユーザーがパスワードを変更するには、[ユーザー名]テキストボックスにユーザー名を入力し、[新しいパスワード]テキストボックスに新しいパスワードを入力します。
ユーザーがフォームを送信するとき、データベースを調べ、データベースで一致するユーザー名を見つけ、その行を更新して、以前のパスワードが新しいパスワードに変更され、暗号化を強化するためにパスワードをソルトする必要があります。
しかし、問題はそれがまったくこれを行っていないということです。データベースはパスワードをまったく更新していません。パスワードをソルトしてもかまいません。何をする必要があるのかわかりません。
以下は私の試みです(私はdbに接続しましたが、以下にそのコードを含めていません):
<?php
// PHP code
session_start();
$salt = "";
for ($i = 0; $i < 40; $i++) {
$salt .= substr(
"./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
mt_rand(0, 63),
1);
}
$username = (isset($_POST['username'])) ? $_POST['username'] : '';
$newpassword = (isset($_POST['newpassword'])) ? $_POST['newpassword'] : '';
if (isset($_POST['submit'])) {
// don't use $mysqli->prepare here
$query = "UPDATE Teacher SET TeacherSalt = $salt, TeacherPassword = SHA1(CONCAT($newpassword,$salt)) WHERE TeacherUserName = ?";
// prepare query
$stmt=$mysqli->prepare($query);
// You only need to call bind_param once
$stmt->bind_param("s",$username);
// execute query
$stmt->execute();
// get result and assign variables (prefix with db)
$stmt->bind_result($dbTeacherUsername,$dbTeacherPassword);
while($stmt->fetch()) {
if ($username == $dbTeacherUsername) {
$loggedIn = true;
}
}
/* close statement */
$stmt->close();
/* close connection */
$mysqli->close();
}
....
<p>Username</p><p><input type="text" name="username" /></p> <!-- Enter Teacher Username-->
<p>New Password</p><p><input type="password" name="newpassword" /></p> <!-- Enter Teacher Password-->
データベーステーブルは現在どのようになっていますか。
TeacherUsername TeacherPassword TeacherSalt
j.lu fgrfre4r4ffsdfv
したがって、j.luがパスワードを変更したい場合は、ユーザー名を入力してから新しいパスワードを入力します。これをすべて上記の表に更新する必要があります。しかし、それは何も更新していません。
ありがとうございました