我有这个问题:
DELETE FROM users WHERE user_email = '$email'
如何通过SQL注入攻击来攻击所有记录被删除?
addslashes()
函数在$email
上应用,然后再发送给查询。
答案 0 :(得分:1)
如果在数据库中设置了错误的编码,则可以绕过addslashes,如下所示(这不适用于UTF-8):
$email = urldecode('%BF%27 OR 1 -- '); // user input
$email = addslashes($email);
$sql = "DELETE FROM users WHERE user_email = '$email'";
因为\
前置%27
('
),%BF
并且黑色格式会产生有效的多字节字符
答案 1 :(得分:1)
如果您使用的是PDO
,则可以使用$pdo->quote($var)
或使用PDOStatement bindParam
,bindValue($var, PDO::INT_PARAM)
来清理数据并避免所有已知的特殊字符用作sql注入。
修改强>
那是因为每个数据库都有自己的保留字。