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

Pol*_*ial 8 php regex sql 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-_]
Run Code Online (Sandbox Code Playgroud)

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



几点说明:

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

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

Jef*_*and 6

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

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

有时候,在安全方面,错误的方法就是这样.我怎么会搞乱你现在的逻辑?Unicode或十六进制编码.