我正在制作一个登录系统(在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)
答案 0 :(得分:2)
您可以使用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'])."'")
答案 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,-,_
以外的任何字符后面的任何空格