2012-06-14 21 views
0

我有一個登錄腳本,我在前一段時間在某個頁面上發現,並且在檢查用戶是否有效的代碼時,似乎少量的代碼是多餘的。登錄腳本中的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循環,並得到相同的結果,或者我應該在那裏像某種額外的安全性來真正檢查行數是否有效?

+3

,這是好事你正在爲你的密碼使用散列函數,但是你[使用md5(它不安全)並且不能使用鹽](http://php.net/manual/en/faq.passwords.php )。您[不應該通過將字符串混合在一起來構建SQL](http://bobby-tables.com/),也可以使用舊的'mysql_ *'函數(由'mysqli_ *'和PDO替代)。 – Quentin

+1

另外,我不建議將會話密鑰存儲在會話變量中,尤其是未經過哈希處理;它確實沒有任何目的。 – mpen

+0

@Mark。所以基本上,使用$ _SESSION ['USERNAME']驗證登錄用戶是完全安全的嗎? – Sandokan

回答

1

不需要while循環,如果沒有結果,那麼如果條件不滿足

0
$result=db_query("SELECT username FROM users WHERE ". 
    "username = '". $username ."' AND password = '" . md5($password) . "'"); 
$res=db_fetch_array($result); 
if(isset($res['username'])) 
{ 
    $_SESSION['USERNAME'] = $username; 
    $_SESSION['PASSWORD'] = $password; 

} 
+0

Beeing過分偏執在這裏,不會這只是檢查如果用戶名設置,而不是驗證它是一個實際有效的用戶?或者是不可能「僞造」會話用戶名? – Sandokan