PHP mysql_query登录系统安全性

时间:2011-09-21 03:48:24

标签: php mysql pdo

我正在制作一个登录系统(在php上真的很新)。我的朋友告诉我,我最好使用PDO。但是,我不知道如何使用PDO,我已经对MySQL有点熟悉了。例如,这是我的代码的一部分:

$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)

2 个答案:

答案 0 :(得分:2)

您可以使用mysql_real_escape_string

而不是猜测ReqExp和/或限制允许的字符
$result = mysql_query("SELECT `username`,`password`
                       FROM `login` 
                       WHERE `username` = '".mysql_real_escape_string($_POST['username'])."' &&
                             `password` = '".mysql_real_escape_string($_POST['password'])."'")

答案 1 :(得分:0)

这应该足以清理您的登录信息,但它会将您的用户名/密码限制为仅限alpha。更好的是/[^a-z0-9-_\s]|^\s|\s$|[^0-9a-zA-Z-_](?=\s)/i

那是a-z,0-9,-,-,and space。删除字符串开头和结尾处的空格,以及除a-z,0-9,-,_以外的任何字符后面的任何空格