回答
正如其他人所說,你的腳本有一堆漏洞。
我假設你只是在爲當地開發。
如果你在這個階段主持它,你肯定會遇到安全問題。
好的,回到你的問題。
有幾種方法可以在提交更新之前驗證用戶。
例如:
認沽SQL狀態更新變化
if(isset($_POST['Update'])){ $UpdateFName = $_POST['FirstName']; $UpdateLName = $_POST['LastName']; $UpdateEmail = $_POST['Email']; $UpdateFPassword = $_POST['Password']; $SQL = $conn->query("UPDATE students SET FName='{$UpdateFName}',LName='{$UpdateLName}',Email='{$UpdateEmail}',Password='{$UpdateFPassword}' WHERE UserID = $User and Password = '$_SESSION["PW"]' "); header('Location:updateinfo.php');
}
時,如果您使用此方法,如果當前的密碼與密碼不同那存儲在數據庫中,那些編輯SQL將不會運行,因爲條件無效
首先驗證用戶。
if(isset($_POST['Update'])){ $UpdateFName = $_POST['FirstName']; $UpdateLName = $_POST['LastName']; $UpdateEmail = $_POST['Email']; $UpdateFPassword = $_POST['Password']; $sqlValidate = $conn->query("SELECT * FROM students WHERE UserID ='$User' and Password='$_SESSION["PW"]' "); $getUser = $sqlValidate -> fetch_array(MYSQLI_BOTH); if($getUser['UserID'] != ''){ $SQL = $conn->query("UPDATE students SET FName='{$UpdateFName}', LName='{$UpdateLName}', Email='{$UpdateEmail}', Password ='{$UpdateFPassword}' WHERE UserID = $User "); }// end if header('Location:updateinfo.php');
}
你可以爲密碼加密閱讀http://php.net/manual/en/function.crypt.php。
是的,這只是爲了演示的目的,而不是現場主持。感謝您的代碼,但我得到這些錯誤:我得到這些錯誤: 意外的''',期待標識符(T_STRING)或變量(T_VARIABLE)或數字(T_NUM_STRING) 修復此錯誤後,我得到此解析錯誤,語法錯誤,意外的'$ _SESSION'(T_VARIABLE),我不確定我錯過了什麼。 –
這意味着季節變量缺失,請確保您聲明會話變量爲密碼以上 – Windy
您的表單基本上沒有驗證。此外,還有SQL注入的機會。 在發佈之前驗證您的電子郵件字段。請嘗試:
if(!filter_var($email_variable,FILTER_VALIDATE_EMAIL){
//throw some kind of exceptions or kill the process
}
我還建議您使用PDO,因爲它支持使用預準備語句。有一個令人驚訝的函數bindParam()可以綁定你的參數。
嘗試:
$DBH = new PDO("mysql:host=localhost;dbname=test", 'root', '');
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$STH = $DBH->prepare("SELECT * FROM student_table WHERE studentID= :id");
$id = 1; // here you should keep it as variable and pass it to param
$STH->bindParam(':id', $id, PDO::PARAM_STR);
$STH->execute();
$STH->setFetchMode(PDO::FETCH_ASSOC);
此外,不發佈原始密碼,直接到你的數據庫。要麼使用內置的PHP哈希算法,要麼使用某種加密函數來保護它們。
- 1. php密碼驗證
- 2. PHP密碼驗證
- 3. 帶密碼的PHP密碼驗證
- 4. PHP正則表達式驗證密碼
- 5. PHP密碼驗證錯誤
- 6. PHP ID和密碼驗證
- 7. PHP登錄(密碼)驗證
- 8. PHP password_verify()不驗證密碼
- 9. php用於密碼驗證
- 10. 驗證php表格
- 11. PHP密碼錶格
- 12. 驗證表格使用php代碼
- 13. 驗證密碼
- 14. 密碼驗證
- 15. 驗證密碼
- 16. 密碼驗證
- 17. 密碼驗證
- 18. 密碼驗證
- 19. PHP嚴格驗證碼
- 20. 使用php和jQuery驗證驗證碼和聯繫表格
- 21. 以Symfony 2格式驗證舊密碼
- 22. MySQL密碼加密驗證
- 23. PHP驗證輸入表格
- 24. 聯繫表格php驗證
- 25. Php ereg驗證表格
- 26. Bcrypt密碼驗證
- 27. jQuery - 驗證密碼
- 28. FOSUserBundle密碼驗證
- 29. 有()驗證密碼 - = _ +
- 30. C密碼驗證?
**切勿存儲純文本密碼!**請使用PHP的[內置函數](http://jayblanchard.net/proper_password_hashing_with_PHP.html)來處理密碼安全性。如果您使用的PHP版本低於5.5,則可以使用'password_hash()'[兼容包](https://github.com/ircmaxell/password_compat)。確保你*** [不要越獄密碼](http://stackoverflow.com/q/36628418/1011527)***或在哈希之前使用其他任何清理機制。這樣做會改變密碼並導致不必要的附加編碼。 –
[Little Bobby](http://bobby-tables.com/)說*** [你的腳本有SQL注入攻擊的風險。](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)***瞭解[編寫](http://en.wikipedia.org/wiki/Prepared_statement)語句[MySQLi](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)。即使[轉義字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! [不相信嗎?](http://stackoverflow.com/q/38297105/1011527) –