我意識到這裏面有很多問題。但我的方法與他們的方法不一樣,所以我想知道。我認爲我理解SQL,但我不想冒未來的風險,所以謝謝你的幫助。 (這只是我正在做的一個項目,而不是作業或任何重要的東西)。這是否容易受到SQL注入的影響
function checkLogin($username, $password) {
$username = strtolower($username);
connectToDatabase();
$result = mysql_query("SELECT * FROM `users` WHERE username='$username'");
$dbpassword = "";
while($row = mysql_fetch_array($result))
{
$rowuser = $row['username'];
if($username != $row['username']) continue;
$dbpassword = $row['password'];
}
if($dbpassword == "") {
return false;
}
$genpass = generatePassword($password);
return $genpass == $dbpassword;
}
所以打我與你最好的拍攝:) 而且我不認爲我的方法同樣有效,因爲它可以。我不明白php足夠了解$row = mysql_fetch_array($result)
不幸的是在做什麼。
SQL注入是在爲你的函數提供$ username或$ password的奇怪值時發生的。如果這些值來自外部提供的來源,則會遇到麻煩。 –
@Ira Baxter,它來自POST,所以我猜這意味着我有麻煩了? – Austin
考慮到有人可能會輸入用於用戶名的文本「'或'A = A」。那麼你的循環會嘗試所有用戶的密碼,我想。這將使猜測密碼變得更容易。如果您的SQL允許在查詢調用中使用多個語句,那麼用戶名文本可能是「'; DELETE * FROM'users'會刪除您的用戶表,或者是UPDATE語句將某些用戶的密碼設置爲特定的密碼用這個密碼登錄很簡單,你需要檢查的是檢查用戶名字符串是否不包含引號 –