机架攻击阻止列表不起作用
Posted
技术标签:
【中文标题】机架攻击阻止列表不起作用【英文标题】:Rack Attack Block List Doesn't work 【发布时间】:2018-07-17 19:11:11 【问题描述】:我在 rails 5 中使用 gem rack-attack
和 gem geoip
。一切都设置好了,但由于某种原因,我无法让阻止列表来阻止国家代码。我已经设置了一个闪光警报,以确保传递了正确的国家代码,并且它是(“CA”)。 “CA”也在阻止列表中,但我的应用程序并没有阻止我访问该站点。
我哪里错了?
def get_ip
@ip = request.ip
@country = GeoIp.geolocation("#@ip", :precision => :country)
country_code = @country[:country_code]
Rack::Attack.safelist('allow from localhost and select countries') do |req|
'127.0.0.1' || '::1' == req.ip || 'US' == req.country_code
end
Rack::Attack.blocklist('block specific countries') do |req|
"CA" == req.country_code
end
end
【问题讨论】:
【参考方案1】:一切都在您的安全清单上。看到这个块了吗?
Rack::Attack.safelist('allow from localhost and select countries') do |req|
'127.0.0.1' || '::1' == req.ip || 'US' == req.country_code
flash[:error] = "#req.country_code"
end
最后一个可执行语句是 flash[:error] 的赋值,它返回字符串“#req.country_code”,任何字符串都是“truthy”,因此块返回 true。
更改语句的顺序,以便最后一条语句返回正确的真/假值。
Rack::Attack.safelist('allow from localhost and select countries') do |req|
flash[:error] = "#req.country_code"
'127.0.0.1' || '::1' == req.ip || 'US' == req.country_code
end
您的阻止列表块也有同样的问题...确保实际测试是最后执行的语句,否则您将永远正确。
编辑
但我刚刚注意到你的安全清单上仍然有所有东西...... '127.0.0.1' 是一个字符串,字符串总是真实的,所以在...
'127.0.0.1' || ...
其余的永远不会被评估,因为字符串为真。
也许你想要这个……
Rack::Attack.safelist('allow from localhost and select countries') do |req|
flash[:error] = "#req.country_code"
'127.0.0.1' == req.ip || '::1' == req.ip || 'US' == req.country_code
end
【讨论】:
谢谢。我明白你的意思了。如果我删除 flash[:error],阻止列表仍然会被忽略。我在那里有错误消息只是为了验证国家代码。任何线索为什么它仍然不起作用?我要编辑我的代码。 是的,你是对的,我忽略了另一个问题。请参阅我的编辑。干杯以上是关于机架攻击阻止列表不起作用的主要内容,如果未能解决你的问题,请参考以下文章
在带有 Xamarin.iOS 的 iOS 7 上的 ViewDidAppear 方法中显示阻止的 UIAlertView 不起作用