【问题标题】:How can someone bypass mysql escape string?有人怎么能绕过mysql转义字符串?
【发布时间】:2015-08-30 12:49:51
【问题描述】:

我在代码中使用了 mysql 转义字符串。我正在获取电子邮件地址并将它们存储在数据库中。这是我使用的转义字符串函数。

mysqli_real_escape_string($connection, $_POST['data'])

但我今天查看了数据库,发现有人能够插入诸如“C:/Windows/xyz”、SQL 查询等内容。这些内容已包含在数据库中。这是怎么回事,即使 HTML 不允许您输入任何内容(除了正确的电子邮件地址)?

【问题讨论】:

  • 它不会删除坏数据。它只是防止它被解释为 MySQL 命令以防止 SQL 注入。
  • 而 HTML5 <input type=email> 只是对浏览器的建议。其他机器人/蜘蛛可以忽略这一点。如果您想要过滤/列入白名单的内容,则必须在服务器端实现相应的逻辑,而不是依赖合规的客户端。
  • 感谢 cmets。约翰康德的问题。当我浏览数据库时,我发现了所有这些 SQL 查询,例如“1 AND 1=1 --”,甚至还有 Javascript 查询 ('")
  • 他是如何通过这一切的?此外,如果他将所有这些都传递到数据库中,那么该站点是否容易受到 SQLi 的攻击?
  • 您仍在将“SQL 注入”与“不需要的数据”混淆。您将1 AND 1=1 -- 作为数据库中某处的文字文本表示它已正确转义以进行插入。这可能是 SQL 注入的尝试。它失败了。但是现在您的数据库中有垃圾。 (同样,存储“垃圾”不是一阶 SQL 漏洞利用)。

标签: php mysqli sql-injection mysql-real-escape-string


【解决方案1】:

清理变量和验证变量之间存在巨大差异。卫生为您的数据库操作提供了 sql-safe 变量,但没有人说用户不能在您的表单上订购“flenty”啤酒。

如果您想验证正确的电子邮件地址字符串,您可以使用filter_var($_REQUEST["email"], FILTER_VALIDATE_EMAIL) 函数。

【讨论】:

    猜你喜欢
    • 2014-08-23
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多