我有这个查询:
DELETE FROM users WHERE user_email = '$email'
SQL注入攻击如何导致所有记录被删除?
在将其发送到查询之前addslashes()
应用函数。$email
我有这个查询:
DELETE FROM users WHERE user_email = '$email'
SQL注入攻击如何导致所有记录被删除?
在将其发送到查询之前addslashes()
应用函数。$email
如果在数据库中设置了错误的编码(这不适用于 UTF-8),您可以绕过 addlashes,如下所示:
$email = urldecode('%BF%27 OR 1 -- '); // user input
$email = addslashes($email);
$sql = "DELETE FROM users WHERE user_email = '$email'";
因为 a\
被添加到%27
( '
) 之前,%BF
并且一个黑斜线会产生一个有效的多字节字符
如果您正在使用PDO
,您可以使用$pdo->quote($var)
或使用 PDOStatement bindParam
,bindValue($var, PDO::INT_PARAM)
它会清理数据并避免所有公共已知的特殊字符被用作 sql 注入。
编辑
那是因为每个数据库都有自己的保留字。