gpt4 book ai didi

ruby-on-rails - 正则表达式检测基本 SQL 注入(inject),但不能作为防止 SQL 注入(inject)的手段

转载 作者:行者123 更新时间:2023-12-04 17:46:37 53 4
gpt4 key购买 nike

首先让我说我是我为确保 SQL 注入(inject)攻击失败而采取的措施的知己。所有 SQL 查询值都是通过事件记录准备语句完成的,所有运算符(如果不是硬编码)都是通过数字白名单系统完成的。这意味着如果有人想通过“ILIKE”搜索,他们将传递 6,如果他们想通过“=”搜索,他们将传递 1,等等。

我也用 BrakemanRails SQL Injection guide定期审查代码。

因此,我想阻止尝试的 SQL 注入(inject)器还有三个剩余的原因。

  • 我们有很多脚本小子试图破解我们。其中大部分是
    已经至少被阻止一次,因为我们有一个文件扩展名
    白名单系统,当他们试图阻止其中大部分
    请求一个 php 文件。曾经虽然他们被列入黑名单
    第一次,在第二轮,他们通常会尝试抛出 SQL
    我们的注入(inject)书。所以我想早点标记这些 child
    节省带宽,如果一个真正的 Actor 在哪里攻击我们,那就是
    很容易从所有脚本小子中整理出来。
  • 放慢任何探索我们防御的尝试。这真的不会
    影响复杂的分布式攻击,但可能会减慢
    介于脚本小子和 super 黑客之间的 Actor 。
  • 标记所有被阻止的请求并设置我们的日志通知
    然后我们的日志服务会通知我们,以增加我们的
    安全意识。

  • 目前我的想法是针对请求路径和参数运行一个简单的正则表达式匹配,以标记最公然的 SQL 注入(inject)尝试并将这些 IP 列入黑名单,所以像这样,使用 rack-attack .
    injection_regex = /SOMEREGEXHERE/

    Rack::Attack.blacklist('sql injection blacklist') do |req|
    Rack::Attack::Fail2Ban.filter(req.ip, :maxretry => 5, :findtime => 10.minutes, :bantime => 24.hours) do
    CGI.unescape(req.query_string).match(injection_regex) || req.path.match(injection_regex)
    end
    end

    我的问题是创建一个正确标记简单 SQL 注入(inject)尝试的正则表达式,但不会对普通用户造成任何问题。我认为一些误报是可以的,这就是为什么上述黑名单系统在第一场比赛后没有列入黑名单的原因。

    在我的搜索中,我发现了一些关于这个主题的问题,但它们似乎都是 like this one ,有人问关于使用正则表达式检测 SQL 注入(inject)的问题,另一个人回答你不应该以这种方式停止 SQL 注入(inject),提出问题的人回答说他们不会使用正则表达式来停止,而只是为了检测,然后是一堆无用的评论。

    那么,这样的正则表达式是否有可能仅作为一种检测手段起作用,并且误报率极低,或者这是一个不值得努力的兔子整体吗?

    最佳答案

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

    http://larrysteinle.com/2011/02/20/use-regular-expressions-to-detect-sql-code-injection/

    文本 block

    '(''|[^'])*'

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

    关于ruby-on-rails - 正则表达式检测基本 SQL 注入(inject),但不能作为防止 SQL 注入(inject)的手段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32486554/

    53 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com