我有兴趣使用https://github.com/kickstarter/rack-attack来扼杀滥用者和蛮力攻击者。我的应用程序运行在多个dynos上,所以我想Rails默认的FileStore并不完全有效,因为每个dyno都有一个文件系统,而且限制需要是两者的聚合。
如果我要为Rails.cache
使用memcached插件服务,如果memcached服务出现故障(例如,对FileStore),Rails中是否有“后备”?
如果没有,随着memcached服务的中断,rails应用程序会崩溃或用户无法访问(与优雅处理错误相比)?
答案 0 :(得分:8)
我是机架攻击的作者。
tl; dr:当你的缓存后端(memcached或redis)关闭时,所有请求都被允许(即失败打开)。
这实际上取决于Rails缓存的功能。 Dalli memcached客户端(ActiveSupport::Cache::DalliStore)和Redis客户端(ActiveSupport::Cache::RedisStore)都会抢救连接错误和超时以返回nil
。
当机架攻击在缓存存储中查询限制值时,缓存存储会返回nil
。机架攻击强制to_i
获得0
。因为你的油门限制是> 0,允许请求。
机架攻击has integration tests在每次提交测试时运行,不会引发任何错误,并且当memcached / redis不可用时允许请求。