0

ユーザー(セッション変数を使用してすでにログインしている)がmd5を変更できるユーザーフォームとフォームアクションを作成しています(MD5が古くて安全でないことはわかっています。これはテスト目的です)SQLデータベース「ユーザー」に保存されている暗号化されたアカウントパスワードテーブル。

入力「currentpassword」、「newpassword」、および「confirmnewpassword」を要求するフォームがあります。フォームは、$_POST を使用して、入力されたデータを passwordaction.php に渡します。

ユーザー名は $_SESSION 'autheticatedUser' から取得され、パスワードは以前の $_POST フォーム変数から取得されます。次に、SQL ステートメントを使用してデータベースからパスワードを取得し、'currentpassword' 変数と比較します。これは安全でないクライアント側の検証と見なされますか? ?

次に、データベース内の指定されたユーザーのパスワード行を更新する SQL UPDATE ステートメントがあり、ユーザーはリダイレクトされ、$_SESSION ヘッダーを使用して成功または失敗が通知されます。

ユーザーアカウントのパスワードを変更しようとすると、ログインページに戻ってきて($ SESSIONヘッダーを使用して)、適切に更新されたことが通知されますが、パスワードが更新されていないデータベースを確認します。

他の誰かの見解や視点が、私が見逃したものを見るのに役立つことを願っています.SQL UPDATEステートメントが機能しない理由を誰かが提案できますか?

建設的な批判は歓迎します

以下は、「アクション」phpページの私のコードです

 <?php

session_start();

$username = $_SESSION["authenticatedUser"];
$currentpassword = md5($_POST['currentpassword']);
$newpassword = md5($_POST['newpassword']);
$confirmnewpassword = md5($POST['confirmnewpassword']);

/* make a connection with database */
$con = mysql_connect("localhost", "root", "") or die(mysql_error());

/* select the database */
mysql_select_db("groupproject") or die(mysql_error());

$queryget = mysql_query("SELECT password FROM users WHERE username='$username'") or 
die(mysql_error());
$row = mysql_fetch_assoc($queryget);
 $currentpasswordDB = $row['password'];

//check passwords

if ($currentpassword==$currentpasswordDB)

{
if ($newpassword==$confirmnewpassword)
{
//success, change password in DB
    $querychange = mysql_query("UPDATE users SET password='$newpassword' WHERE       
 username='$username'") or die(mysql_error());
}
else header("Location: passwordmismatch.php");

if ($querychange == true){

    $_SESSION["passchange"] = "Your password has been changed, Please Log in";

    header("Location:login.php");

}

else $_SESSION["nopasschange"] = "Your password could not be changed, Please try   
again";
 header("Location:userchangepassword.php");

}

else header("Location: passwordmismatch.php");

mysql_close($con);

?>
4

2 に答える 2

1

$user$usernameは異なる変数です。

于 2012-12-08T19:38:51.293 に答える
0

ちょっと遅い :P

ただし、行 $confirmnewpassword = md5($POST['confirmnewpassword']);

そのはず

$confirmnewpassword = md5($_POST['confirmnewpassword']);

于 2013-07-21T11:39:09.143 に答える