我对使用https://github.com/kickstarter/rack-attack抑制滥用者和暴力攻击者感兴趣。我的应用程序在多个dyno上运行,因此我想Rails的默认FileStore不能完全有效,因为每个dyno都有一个文件系统,并且节流必须是两者的总和。
如果我要对Rails.cache
使用memcached插件服务,那么如果memcached服务出现故障(例如对FileStore说),Rails会内置“后备”功能吗?
如果不是,则随着memcached服务的中断,rails应用程序是否会崩溃或无法被用户访问(与正常处理错误相比)?
最佳答案
我是机架攻击的作者。
tl; dr:当您的缓存后端(memcached或redis)关闭时,所有请求都将被允许(即fail-open)。
这实际上取决于Rails缓存的功能。 Dalli memcached客户端(ActiveSupport::Cache::DalliStore)和Redis客户端(ActiveSupport::Cache::RedisStore)都抢救连接错误和超时以返回nil
。
当机架攻击向高速缓存存储区查询限制值时,高速缓存存储区将返回nil
。机架攻击将to_i
转换为0
。并且由于您的 throttle 限制> 0,因此允许该请求。
机架攻击has integration tests在每次提交测试上运行,不会引发任何错误,并且在不可用memcached/redis时允许请求。
关于ruby-on-rails - Rails是否可以优雅地处理缓存存储中断(memcached)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27586643/