我想知道sql注入并想知道何时使用mysqli_real_escape_string。
每次在查询中都有WHERE子句时,是否需要使用它?
答案 0 :(得分:3)
您应该将mysqli_real_escape_string用于来自用户或不可信任的任何数据。
答案 1 :(得分:0)
在查询中包含$ _REQUEST“vars”时,必须使用它 例如
$query = "UPDATE foo set bar = '{$_GET['var']}' ..."
$query = "INSERT INTO foo ('{$_POST['var']}',) ..."
$query = "SELECT bla from foo WHERE bar = '{$_COOKIE['var']}'"
每个查询都必须是mysqli_real_escape_string来提供注射......
答案 2 :(得分:0)
您使用mysqli_real_escape_string
或其任何变体来确保正确转义任何用户输入字段中的数据。
例如,您有一个包含少量输入的表单。单击“提交”,数据将作为请求发送到PHP脚本。在脚本中,将用户发布的值插入数据库。
如果用户在用户登录的输入字段中输入以下内容,例如:
' WHERE `username` = {x} AND password > 1;
该人有可能拥有您正在使用的表格中的所有数据。使用:
mysqli_real_escape_string($input)
将产生上述内容:
\' WHERE `username` = {x} AND password > 1;
''上的转义字符串将阻止可能的SQL注入攻击。
那就是说没有理由你应该使用mysqli_real_escape_string()
作为PDO,并且绑定参数在偏转大量不同的SQL攻击/注入方法方面要优越得多。学习并使用它!
根据评论进行修改
%
和_
还需要特殊处理mysqli_real_escape_string()
function escape_extra_chars ( $string )
{
$string = preg_replace("/\%/", "\%", $string);
$string = preg_replace("/\_/", "\_", $string);
return $string;
}
无论如何沿着这些方向(那个功能未经测试)