【发布时间】: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