我正在創建一個用戶表單和表單操作,其中用戶(已登錄使用會話變量)可以更改他們的MD5(我知道MD5已過時和不安全,這是出於測試目的)加密的帳戶密碼存儲在sql數據庫的用戶表中。更新用戶md5密碼在sql表中使用用戶更改密碼錶格
我有一個表單,要求輸入'當前密碼','newpassword'和'confirmnewpassword'。表單使用$ _POST將輸入的數據傳遞給passwordaction.php。
用戶名是從$ _SESSION'autheticatedUser'獲得的,並且密碼是從前面的$ _POST表單變量中獲取的。然後,我使用sql語句從數據庫獲取密碼以與'currentpassword'變量進行比較,將此計數作爲INSECURE客戶端側驗證? ?
然後,我有一個SQL UPDATE語句來更新數據庫中指定用戶的密碼行,並且用戶使用$ _SESSION頭重定向和通知成功或失敗。
我一直在閱讀和重新閱讀我的代碼,試圖找出何時出現錯誤,因爲當試圖更改用戶帳戶密碼我不斷返回到我的登錄頁面(使用$ SESSION標頭)告訴我它已經但是當我檢查數據庫時密碼沒有更新。
我希望有人elses觀點或觀點可能能夠幫助我看看什麼是錯過的,任何人都可以提出爲什麼我的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);
?>
您正在使用[an **過時的**數據庫API](http://stackoverflow.com/q/12859942/19068),並應使用[現代替換](http://php.net/manual/) EN/mysqlinfo.api.choosing.php)。你也**易受[SQL注入攻擊](http://bobby-tables.com/)**,現代的API會使[防禦]更容易(http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php)自己從。 – Quentin
MD5 [不適合密碼散列](http://php.net/manual/en/faq.passwords.php#faq.passwords.fasthash),另請參閱[密碼存儲備忘錄](https:// www .owasp.org/index.php的/ Password_Storage_Cheat_Sheet)。 – Quentin
這兩個意見是有益的謝謝你,但是這個項目永遠不會成爲一個活的網站。我會牢記MD5並不是最佳的散列工具 –