什么时候使用mysqli_real_escape_string?

时间:2012-07-25 15:20:05

标签: php mysqli

  

可能重复:
  Best way to prevent SQL Injection in PHP

我想知道sql注入并想知道何时使用mysqli_real_escape_string。

每次在查询中都有WHERE子句时,是否需要使用它?

3 个答案:

答案 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;
}

无论如何沿着这些方向(那个功能未经测试)