mysql - 有没有办法查看MySQL数据库是否被SQL注入(inject)攻击访问过?

标签 mysql sql-injection

我最近发现我的网站有一个页面存在 SQL 注入(inject)漏洞。经过测试,它可以通过诸如 sqlmap 之类的渗透测试工具轻松利用。如何确定站点数据库是否已被 SQL 注入(inject)攻击访问,并可能利用此漏洞?服务器正在运行 Apache/2.4.18MySQL Ver 14.14 Distrib 5.7.16

最佳答案

不,没有真正可靠的方法来检测 SQL 注入(inject)攻击。

一些近似检测的方法依赖于保留应用程序运行的已知合法 SQL 查询的“白名单”。然后,如果查询日志包含任何未知的内容,则可能是它们来自非法来源的线索。否则它们可能由 DBA 在查询工具中运行。

它还要求您记录每个 SQL 查询,并且准备好已知良好查询的白名单。

正如 @alexn 上面评论的那样,您可以查看您的 Apache 日志(如果您认为 SQL 注入(inject)直接来自 http 请求,并非所有 SQL 注入(inject)漏洞都是如此)。为此,您需要在日志中搜索所有可能利用您在代码中发现的漏洞的 http 请求,然后使用该搜索结果过滤掉所有看起来有合法请求的请求(例如 ?id=123 很好,但 ?id=123 OR 1=1 很可疑)。

还有其他产品会监视查询流量,并在 SQL 查询发生时尝试猜测 SQL 查询是合法还是可疑查询,但这些产品很容易出现误报和漏报。

关于mysql - 有没有办法查看MySQL数据库是否被SQL注入(inject)攻击访问过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44356048/

相关文章:

mysql - 是否可以在没有准备语句的情况下使用动态表名在一个查询中完成此操作?

php - HTML 表单不提交到 MYSQL 数据库

php - 如何使用 SQLi 在 SQL IN 运算符的准备语句中使用 php 数组?

java - 如何在 Java 中构建查询以防止使用准备好的语句进行 SQL 注入(inject)

php - 当绑定(bind)变量难以使用时如何对抗SQL注入(inject)漏洞?

mysql - 从 MySql 中的计数结果中获取所有计数的 ID

php - 执行() SQLSTATE[HY093] : Invalid parameter number

mysql - 在 Mysql 中需要多个子查询的查询

php - MySQL 清理 mysql_fetch_row

php - 仍然使用 PDO 参数化查询攻击 SQL 注入(inject)