以字符串格式给出1000个mysql查询,在运行查询之前,是否有办法分析并删除这些字符串中的任何SQL注入?
我的一个想法是检查字符串中sql注入中使用的常用单词/短语,这些单词/短语从未在运行查询的应用程序中使用。如果找到,请不要运行查询并提醒管理员。
答案 0 :(得分:3)
答案 1 :(得分:1)
我的一个想法是检查字符串中sql注入中使用的常用单词/短语,这些单词/短语从未在运行查询的应用程序中使用。如果找到,请不要运行查询并提醒管理员。
非常糟糕的主意。
解决方案是使用PDO:http://php.net/manual/en/ref.pdo-mysql.php
使用参数传递所有 $ vars 如果必须使用动态SQL,请确保根据白名单检查注入的内容 请参阅此问题,了解如何安全地执行此操作:How to prevent SQL injection with dynamic tablenames?
现在你救了。
如果您无法使用PDO,请使用mysql_real_escape_string()
这是一个例子:
$var = mysql_real_escape_string($_POST['unsafe_value']);
$query = "SELECT * FROM user WHERE username = '$var' ";
// The quotes are vital, without them ^ ^
//you will may get syntax errors and mysql_real.... will not protect you!
您只能将此用于参数,而不能用于表格,列,数据库名称或SQL构造,还要记住始终引用'$vars'
。
对于除了值之外的任何内容,您必须使用白名单
请注意addslashes
不起作用,不应使用!
对于整数值,您可以使用intval(),但我建议不要使用它,它会节省时间,使您的代码更难以阅读,并且它会违反规则以始终使用mysql_real_escape_string()
。