【问题标题】:sql injection on delete query [closed]删除查询上的sql注入[关闭]
【发布时间】:2013-01-28 12:06:02
【问题描述】:

我有这个问题:

DELETE FROM users WHERE user_email = '$email'

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

【问题讨论】:

标签: php mysql sql-injection sql-delete


【解决方案1】:

如果在数据库中设置了错误的编码(这不适用于 UTF-8),您可以通过以下方式绕过 addlashes:

$email = urldecode('%BF%27 OR 1 -- '); // user input

$email = addslashes($email);
$sql = "DELETE FROM users WHERE user_email = '$email'";

因为\ 被添加到%27 (')、%BF 之前,并且黑斜线会产生有效的多字节字符

Here is an blog article explaining this

【讨论】:

    【解决方案2】:

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

    编辑

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

    【讨论】:

    • 不幸的是,代码中没有使用 PDO。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多