當您驗證註冊用戶時,您提出請求,例如,一個例子,我發現:PHP驗證註冊用戶
$user = $_POST['user'];
$pw = $_POST['password'];
$sql = "SELECT user,password FROM users
WHERE user='$user'
AND password='$pw'
LIMIT 1";
$result = mysql_query($sql);
if (mysql_num_rows($result)){
//we have a match!
}else{
//no match
}
現在會有什麼好處或末端具有LIMIT 1
的任何一點? 爲什麼你需要選擇用戶和密碼時,你可以選擇user_id?
豈不
SELECT user_id FROM users
WHERE user = '{$user}'
AND password = '{$pw}'
是完全相同的,但物流短代碼?
編輯:思考這個小細節讓我找到了一個更多的檢查,以防止黑客。 不應該有一個以上的用戶使用相同的電子郵件和密碼,因此如果他們以某種方式提供密碼123
串' OR password = '*'
(或類似的邏輯),這將危及我的查詢,沒有限制將幫助,因爲下一步我可以指望
if (count($result) > 1) {
echo "we got hacked";
else
<proceed...>
是的,我這樣做,但md5本身並不安全,因爲許多網站與數據庫保存散列和原始字符串我認爲像crc32(md5(散列(「sha256」,$ _ POST ['密碼'])))會好得多 – JohnA 2012-04-09 13:38:32