我正在为客户开发一个系统。我需要一些建议。这是防止sql注入的安全代码吗?
$username=$_POST["username"];
$password=md5($_POST["password"]);
$num_rows=mysql_num_rows(mysql_query("select * from table where username='$username' AND password='$password'"));
if($num_rows>0)
{
echo "Logged in";
}
else
{
echo "Incorrect username or password";
}
提前感谢您的建议。 请详细说明您的答案为何上述代码不安全。谢谢 如果你没有任何答案,请不要投反对票。
答案 0 :(得分:2)
不,代码对于SQL注入是不安全的,尤其是$username
变量。您应该通过mysql_real_escape_string()
转义变量。如果我是你,我会在用户名和密码中添加trim()
函数,因为用户有时会在意外输入文本之前/之后添加空格。
更重要的是,停止使用已弃用的mysql_*
函数。改为使用MySQLi / PDO。
注意:$password
没问题,因为它是由md5()
哈希生成的,它不包含导致SQL错误/注入的任何字符。
答案 1 :(得分:0)
上层代码不满足任何sql注入,如
' or '1'='1' --
' or '1'='1' ({
' or '1'='1' /*
你怎么能说它是开放的sql injections.can你详细说明你的答案朋友?