Ruby on rails Regex可以检测基本SQL注入,但不能作为防止SQL注入的手段

Ruby on rails Regex可以检测基本SQL注入,但不能作为防止SQL注入的手段,ruby-on-rails,regex,sql-injection,rackattack,Ruby On Rails,Regex,Sql Injection,Rackattack,首先,我要说,我是确保SQL注入攻击失败的知己。所有SQL查询值都是通过活动记录准备语句完成的,所有运算符(如果不是硬编码的话)都是通过数字白名单系统完成的。这意味着如果有人想通过“ILIKE”搜索,他们会通过6,如果他们想通过“=”搜索,他们会通过1,以此类推 我还使用和定期检查代码 因此,我想阻止尝试的SQL注入器还有三个原因 我们有很多脚本小子想攻击我们。其中大多数是 已阻止至少一次,因为我们有文件扩展名 白名单系统,当他们试图 请求一个php文件。有一次他们被列入黑名单 第一次,在第二轮

首先,我要说,我是确保SQL注入攻击失败的知己。所有SQL查询值都是通过活动记录准备语句完成的,所有运算符(如果不是硬编码的话)都是通过数字白名单系统完成的。这意味着如果有人想通过“ILIKE”搜索,他们会通过6,如果他们想通过“=”搜索,他们会通过1,以此类推

我还使用和定期检查代码

因此,我想阻止尝试的SQL注入器还有三个原因

  • 我们有很多脚本小子想攻击我们。其中大多数是 已阻止至少一次,因为我们有文件扩展名 白名单系统,当他们试图 请求一个php文件。有一次他们被列入黑名单 第一次,在第二轮中,他们通常尝试抛出SQL 这本书是给我们的。所以我想早点给这些孩子打个旗子 节省带宽,如果一个真正的演员在哪里攻击我们,它将是 很容易从所有的剧本中分辨出来
  • 放慢任何探测我们防御的尝试。这不是真的 影响复杂的分布式攻击,但可能会减慢 介于脚本小子和超级黑客之间的演员
  • 标记所有被阻止的请求并设置日志通知 然后我们的日志记录服务会通知您,以增加我们的 安全意识
  • 目前,我的想法是对请求路径和参数运行一个简单的正则表达式匹配,以便标记最明显的SQL注入尝试,并将这些IP列入黑名单,所以类似于这样,使用

    我的问题是创建一个正则表达式,它正确地标记了一个简单的SQL注入尝试,但不会给普通用户带来任何问题。我认为一些误报是可以的,这就是为什么上面的黑名单系统在第一次匹配后没有被列入黑名单

    在我的搜索中,我发现了很多关于这个主题的问题,但它们似乎都是这样的,有人问关于使用正则表达式检测SQL注入的问题,另一个人回答说你不应该以这种方式停止SQL注入,问问题的人回答说他们不会使用正则表达式停止,而只是检测,接着是一堆毫无帮助的评论


    那么,这样一个正则表达式是否有可能仅作为一种检测手段工作,并具有最小的误报率,或者这是一个不值得付出努力的整体?

    此链接应该为您提供开始时的模式

    文本块

    '(''|[^'])*'
    
    SQL语句

    \b(ALTER|CREATE|DELETE|DROP|EXEC(UTE){0,1}|INSERT( +INTO){0,1}|MERGE|SELECT|UPDATE|UNION( +ALL){0,1})\b
    

    在某种程度上,我相信这是可能的。不过,首先要做的是把你想找的东西列在一起。一旦你有了这个列表,你就可以创建一个模式来找到它们。你看过了吗?您的问题的一个解决方案可能是使用这些正则表达式创建输入传递的几个级别。如果任何级别匹配,则表示警告。
    \b(ALTER|CREATE|DELETE|DROP|EXEC(UTE){0,1}|INSERT( +INTO){0,1}|MERGE|SELECT|UPDATE|UNION( +ALL){0,1})\b