检测潜在的SQL注入攻击以及其他安全问题

时间:2011-10-11 16:31:14

标签: php sql regex security sql-injection

我们都知道,制作一个没有一两个缺陷的大型网站几乎是不可能的。因此,我编写了一个小型监视器,用于检查Apache访问日志中是否存在潜在的SQL注入攻击(以及其他内容),并且它运行良好。每当有人试图进行攻击时我都会收到警报,并且我有很少的误报,现在默认操作是将它们转储到iptables下拉列表中。它甚至帮助我识别了一些(非安全性)错误并将其删除。

这是我的规则(不区分大小写):

PathInjection = \./\.\./(bin|boot|data|dev|etc|home|lib|lib64|media|mnt|opt|proc|root|sbin|selinux|srv|sys|tmp|usr|var)/

Havij = 0x31303235343830303536

r3dm0v3 = 0x7233646D3076335F68766A5F696E6A656374696F6E

LogicBypass = '.*?(\bor|\band|\bxor|\|\||\&\&).*?--

UnionSelect = union[^a-z-_]+((all|distinct)[^a-z-_]+)?select[^a-z-_]

我想知道的是,您如何绕过这些检查并仍能产生有效注射?你能想出一种在不引入误报的情况下改进它们的方法吗?



几点说明:

  • 关闭区分大小写。
  • 我正在使用MySQL。
  • Havij和r3dm0v3条目用作全面阻止使用这些自动化工具。
  • 我正在检查raw和urldecoded字符串。
  • 我不是在寻找像“制作更安全的代码”这样的答案。
  • 我不是在寻找另一种方法来做到这一点,只是一种改善现有逻辑的方法。

修改
好吧,所以人们似乎误解了我的意图。这可能是我的错,因为我没有完全解释。这是作为监控产品的附加功能而请求的,旨在提供最小安全监控。作为我们与客户和我们的文档对话的一部分,我们强调这不是一个包罗万象,也不是适当的安全基础设施(例如IDS和防火墙)的替代品。它只是一种信息服务,可帮助提供基本威胁检测并生成有关潜在攻击数量的统计信息。我不是想写一个IDS或防火墙。如果由我决定,我会退出该功能并告诉他们使用自己的监控系统安装一整套安全基础设施,但这不是我的号召。目前的情况是我一直在自己的网站上测试系统。现在,我只是想找到一种方法来改进正则表达式字符串,使其更有效。希望这可以解决一些问题。

4 个答案:

答案 0 :(得分:6)

你在谈论写IDS。除非您的产品是IDS,否则只需获取并安装一个。 Snort是众所周知的,并且有免费版本。

  

我不是在寻找另一种方法来做到这一点,只是一种改善现有逻辑的方法。

有时候谈到安全问题,错误的做法就是这样。我怎么会搞乱你现在的逻辑? Unicode或十六进制编码。

答案 1 :(得分:0)

这是使用深度神经网络向量嵌入和相似性搜索引擎进行 IT 威胁检测的nice example

答案 2 :(得分:-1)

  

你能想出一种在不引入误报的情况下改善它们的方法吗?

我根本不会想到改善这种愚蠢的做法。我宁愿改善网站安全性。

  

我们都知道,在没有一两个缺陷的情况下制作一个大型网站几乎是不可能的。

我不同意这一点。至少对于SQL注入。注射是非常愚蠢的事情,保护并不是什么大问题。

答案 3 :(得分:-5)

sql注入是目前最受好评的Web应用程序攻击。网上有许多不安全的代码,还有几种方法可以保护应用程序免受SQL注入攻击。当应用程序使用输入构造动态sql语句或使用存储过程连接到数据库时,可能会发生SQL注入。 sql注入开发的方法根据DBMS类型和开发条件进行分类,漏洞请求可以实现插入,更新,删除。有可能将sql代码注入到sql请求的任何部分中盲目sql注入各种dbms中使用的sql实现的特性。成功的SQL注入攻击使攻击者能够在应用程序的数据库中执行命令,并接管服务器。 我的建议:

检查谷歌更多如何防止SQL注入