2011-09-21 162 views
0

我正在創建一個登錄系統(並且真的是新的php)。我的朋友告訴我,我最好使用PDO。但是,我不知道如何使用PDO,而我對MySQL已經有點熟悉了。舉例來說,這裏是我的代碼的一部分:PHP mysql_query登錄系統安全

$un = preg_replace('/[^a-z]/i','',$_POST['username']); 
$pw = preg_replace('/[^a-z]/i','',$_POST['password']); 
$result = mysql_query("SELECT `username`,`password` FROM `login` where `username` = $un && `password` = $pw") or die (mysql_error()); 

請問上面的代碼有任何類型的安全風險,因爲所有非字母數字字符都被剝奪?如果是這樣,那麼最好的辦法是什麼? (使用PDO或原始MySQL)

回答

0

這應該足以對您的登錄進行消毒,但它將您的用戶名/密碼限制爲只有alpha。最好是/[^a-z0-9-_\s]|^\s|\s$|[^0-9a-zA-Z-_](?=\s)/i

那就是a-z,0-9,-,-,and space。刪除字符串的開始和結束空間,以及隨後比a-z,0-9,-,_

2

其他任何字符,而不是在ReqExp的猜測和/或限制允許的字符的任何空間,你可以只使用mysql_real_escape_string

$result = mysql_query("SELECT `username`,`password` 
         FROM `login` 
         WHERE `username` = '".mysql_real_escape_string($_POST['username'])."' && 
          `password` = '".mysql_real_escape_string($_POST['password'])."'") 
+0

絕對沒有別的辦法可以執行某種類型的MySQL注入?我應該採取哪些安全預防措施? –

+0

@Howard這是'mysql_real_escape_string' [與字符串引用結合]的好處,你可以放心不會有注入。 – Shad