【问题标题】:Rack-Attack: Array of IP addresses机架攻击:IP 地址数组
【发布时间】:2014-05-28 14:56:58
【问题描述】:

我正在尝试创建一个 IP 地址数组,以便在运行应用程序时,Rack-Attack 可以从允许访问应用程序的 IP 地址集中识别。所以我所做的如下:

  a = "127.0.0.1"
  Rack::Attack.blacklist('allow from localhost') do |req|
    p "#{'127.0.0.1' == req.ip} "
   a != req.ip 
  end

以上方法有效,因此 localhost 可以访问应用程序,但我尝试了以下方法,但似乎无法正常工作:

a = "127.0.0.1", "1.2.3.4"
  Rack::Attack.blacklist('allow from localhost') do |req|
    a.select{|x| x != req.ip}.join("")
  end

有人可以解释一下正确的方法是什么。你可以看到我创建了一个数组。我想让Rack::Attack 检测阵列中的IP 地址是否可以访问。

【问题讨论】:

    标签: ruby-on-rails rackattack


    【解决方案1】:

    执行此操作的有效方法是使用 Set,这是一个类似于数组但提供对单个独特元素的快速查找的容器。

    所以,考虑到这一点,重写:

    allowed = %w[ 127.0.0.1 1.2.3.4 ].to_set
    
    Rack::Attack.blacklist('allow from localhost') do |req|
      !allowed.include?(req.ip)
    end
    

    在您的原始声明中:

    a = "x", "y"
    

    在这种情况下,a 被分配给该列表中的第一件事 "x",其余的被忽略。

    【讨论】:

    • 你提到 to_set 引发了这个家伙在 rails conf 2014 视频中提到的关键点之一:youtube.com/… 但他确实做到了BANNED_IPS = Set.new['1.2.3.4', '5.6.7.8'] 但是谢谢
    • Set.new([...])[...].to_set 是获得相同结果的两种方式。
    【解决方案2】:

    首先,如果您更明确地创建一个数组并写入,那就太好了

    a = ["127.0.0.1", "1.2.3.4"]
    

    但最好使用Set

    allowed = Set.new['127.0.0.1', '1.2.3.4']
    

    (也使用单引号可以节省时间,因为 Ruby 将此类字符串视为文字,而不是双引号)

    要检查元素是否是数组的成员,您应该使用Array#include? 这样代码就变成了

    Rack::Attack.blacklist('allow from localhost') do |req|
      !a.include? req.ip
    end
    

    【讨论】:

    【解决方案3】:

    我知道为时已晚,但我不喜欢 Array#include? 解决方案,因此我继续为 safelistblocklist 添加了 2 个新方法,以支持相同的方法。在这里分享它,因为它也会帮助其他用户。可以在forked rack_attack branch找到。

    用法:

    安全列表:

    # config/initializers/rack_attack.rb (for rails app)
    
    ALLOWED_IPS = %w[127.0.0.1 ::1 5.6.7.8 123.456.789.0/24]
    
    Rack::Attack.safelist_ips(ALLOWED_IPS)
    

    黑名单:

    # config/initializers/rack_attack.rb (for rails apps)
    
    BLOCKED_IPS = %w[1.2.3.4 123.456.789.0/24]
    
    Rack::Attack.blocklist_ips(BLOCKED_IPS)
    

    【讨论】:

      猜你喜欢
      • 2011-10-22
      • 2011-04-04
      • 2020-07-18
      • 2021-03-03
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多