0

我有这个查询:

DELETE FROM users WHERE user_email = '$email'

SQL注入攻击如何导致所有记录被删除? 在将其发送到查询之前addslashes()应用函数。$email

4

2 回答 2

1

如果在数据库中设置了错误的编码(这不适用于 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并且一个黑斜线会产生一个有效的多字节字符

这是一篇解释这一点的博客文章

于 2013-01-28T12:11:46.180 回答
1

如果您正在使用PDO,您可以使用$pdo->quote($var)或使用 PDOStatement bindParambindValue($var, PDO::INT_PARAM)它会清理数据并避免所有公共已知的特殊字符被用作 sql 注入。

编辑

那是因为每个数据库都有自己的保留字。

于 2013-01-28T12:18:21.507 回答