可能重复:
最好的防止PHP SQL注入方式
我想知道有关SQL注入,想知道何时使用mysqli_real_escape_string。
我需要每一个我在查询的WHERE子句时使用它呢?
可能重复:
最好的防止PHP SQL注入方式
我想知道有关SQL注入,想知道何时使用mysqli_real_escape_string。
我需要每一个我在查询的WHERE子句时使用它呢?
您应该使用mysqli_real_escape_string为来自用户或不能被信任的任何数据。
你必须使用它时,你有$ _REQUEST“瓦尔”在查询中如。
$query = "UPDATE foo set bar = '{$_GET['var']}' ..."
$query = "INSERT INTO foo ('{$_POST['var']}',) ..."
$query = "SELECT bla from foo WHERE bar = '{$_COOKIE['var']}'"
每本querys必须mysqli_real_escape_string提供注射...
您可以使用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;
}
沿着反正那些行(即FUNC是未经测试)