我感兴趣的是使用https://github.com/kickstarter/rack-attack来控制滥用者和野蛮的攻击者。我的应用程序运行在多个dynos上,因此我设想Rails默认的FileStore并不完全有效,因为每个dyno都有一个文件系统,而节流需要两者的总和。
如果我要为Rails.cache
使用memcached插件服务,那么如果memcached服务出现故障(例如,对FileStore),那么Rails中是否有内置的“后备”?
如果不是,随着memcached服务的中断,rails应用程序会崩溃还是变得用户无法访问(vs会优雅地处理错误)?
发布于 2015-02-02 10:14:10
我是“机架攻击”的作者。
tl;dr:当缓存后端(memcached或redis)关闭时,所有请求都被允许(即失败打开)。
这实际上取决于Rails缓存的功能。Dalli客户端(ActiveSupport::Cache::DalliStore)和Redis (ActiveSupport::Cache::RedisStore)拯救连接错误和超时以返回nil
。
当齿条攻击查询缓存存储的节流值时,缓存存储将返回nil
。机架攻击施放to_i
以获得0
。由于您的节气门限制是> 0,请求是允许的。
当memcached/redis不可用时,在每个提交测试上运行齿条攻击有集成测试,测试是否会引发错误并允许请求。
https://stackoverflow.com/questions/27586643
复制