它是mysql注入的安全代码吗?请给我一些建议


is it a safe code from mysql injections?some suggestions please

我正在为客户端开发一个系统。我需要一些建议。这是防止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";
}

提前感谢您的建议。请详细说明为什么上述代码不安全。谢谢如果你没有答案,请不要对这个问题投反对票。

否,该代码对于SQL注入是不安全的,尤其是$username变量。您应该通过mysql_real_escape_string()对变量进行转义。如果我是你,我会在用户名和密码中添加trim()函数,因为用户有时会意外地在文本输入之前/之后添加空格。

更重要的是,停止使用不推荐使用的mysql_*函数。请改用MySQLi/PDO。

注意:$password很好,因为它是由md5()哈希生成的,它不会包含任何导致SQL错误/注入的字符。

上层代码不满足任何类似的sql注入

' or '1'='1' -- 
' or '1'='1' ({ 
' or '1'='1' /*  

你怎么能说它对sql注入是开放的呢?朋友们,你能详细说明你的答案吗?