2011-09-21 152 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