我有一個登錄腳本,我在前一段時間在某個頁面上發現,並且在檢查用戶是否有效的代碼時,似乎少量的代碼是多餘的。登錄腳本中的Reduntant代碼?
$qry = "SELECT username FROM users WHERE ".
"username = '". $username ."' AND password = '" . md5($password) . "'";
$result = mysql_query($qry);
if(mysql_num_rows($result) == 1) {
while($row = mysql_fetch_assoc($result)) {
$_SESSION['USERNAME'] = $username;
$_SESSION['PASSWORD'] = $password;
}
session_write_close();
header("location: memberpage.php");
} else { .... }
對我來說,由於if-code已經檢查用戶是否有效(1行返回),while循環似乎是多餘的。我可以只刪除while循環,並得到相同的結果,或者我應該在那裏像某種額外的安全性來真正檢查行數是否有效?
,這是好事你正在爲你的密碼使用散列函數,但是你[使用md5(它不安全)並且不能使用鹽](http://php.net/manual/en/faq.passwords.php )。您[不應該通過將字符串混合在一起來構建SQL](http://bobby-tables.com/),也可以使用舊的'mysql_ *'函數(由'mysqli_ *'和PDO替代)。 – Quentin
另外,我不建議將會話密鑰存儲在會話變量中,尤其是未經過哈希處理;它確實沒有任何目的。 – mpen
@Mark。所以基本上,使用$ _SESSION ['USERNAME']驗證登錄用戶是完全安全的嗎? – Sandokan