下面的PHP语句是否可以防止MySQL注入?
$strSQL = "SELECT * FROM Benutzer WHERE Benutzername = '".$Benutzer."' AND Password = '".md5($PW)."'";变量$Benutzer和$PW是用户的输入。
我们正在根据常见的SQL注入技术检查用户名和密码:
' or 0=0 --," or 0=0 --,or 0=0 --,' or 0=0 #," or 0=0 #,or 0=0 #,' or 'x'='x," or "x"="x,') or ('x'='x,' or 1=1--," or 1=1--,or 1=1--,' or a=a--," or "a"="a,') or ('a'='a,") or ("a"="a,hi" or "a"="a,hi" or 1=1 --,hi' or 1=1 --,hi' or 'a'='a,hi') or ('a'='a和d25代码。
我是不是遗漏了什么?我应该使用不同的方法来防止SQL注入吗?
发布于 2009-09-22 13:27:37
您可能需要查看用于查询数据库的参数化查询。这消除了SQL注入攻击。
我主要使用postgreSQL,执行这种查询的格式如下所示:
$query = 'select * from Benutzer where Benutzername = $1 and Passwort = $2';
$params = array($Benutzer, md5($PW));
$results = pg_query_params($query, $params);大多数数据库都有一个类似于这种功能的函数。
希望这能帮上忙,祝你好运!
凯尔
发布于 2009-09-22 13:25:16
我个人建议使用像SHA1 over MD5这样的算法,因为碰撞的可能性较低。你也应该是用盐腌你的密码,否则你可以用彩虹桌破解你的密码。
另外,使用mysql_real_escape_string()来逃避事情,不要简单地搜索和替换普通的注入。
发布于 2009-09-22 13:39:12
准备好 语句是一个奇妙的发明。
例如,http://www.php.net/manual/en/pdo.prepare.php和http://www.php.net/manual/en/mysqli.prepare.php。
https://stackoverflow.com/questions/1460060
复制相似问题