2

rack_attack gem 提供了静态IP 列表的简单安全列表,例如:

  # config/rack_attack.rb
  ok_ips="1.1.1.1, 2.2.2.2, 3.3.3.3"

  Rack::Attack.safelist('safelist these IPs') do |req|
    ok_ips.include?(req.ip)
  end

但是有没有什么方法可以动态更新安全列表中的 IP 列表而不需要重新启动服务器才能生效?

例如,如果安全列表中的 IP 在 Memcache 中的“OK_IPS”键下,则在上次服务器重启时 Memcache 中的任何 IP 都被列入安全列表,但任何新添加的 IP 都不会在下次服务器重新启动之前被列入安全列表。

  # config/rack_attack.rb
  ok_ips = my_cache_read_method("OK_IPS") # "1.1.1.1, 2.2.2.2, 3.3.3.3 etc etc"

  Rack::Attack.safelist('safelist these IPs') do |req|
    ok_ips.include?(req.ip)  # IPs added after server restart wont be included yet
  end
4

1 回答 1

1

显然,如果您将方法移动到块中,它将根据请求进行评估:

Rack::Attack.safelist('safelist these IPs') do |req|
  ok_ips = my_cache_read_method("OK_IPS") # "1.1.1.1, 2.2.2.2, 3.3.3.3 etc etc"
  ok_ips.include?(req.ip)  # IPs added after server restart wont be included yet
end
于 2021-04-15T20:59:02.477 回答