我想知道在rails中直接将任意数据作为缓存名传递是否安全,例如:
Rail.cache.fetch(params[:unsafe_param], expires_in: 2.hours) do
'foo'
end我使用的是redis驱动程序,我担心的是对缓存的任何SQL-Injection攻击,这是我必须担心的事情还是驱动程序本身进行了消毒?
发布于 2015-09-16 18:29:13
这取决于你的用法,但一般的回答是肯定的。这是不安全的,因为Redis没有身份验证的概念。
键只是字符串,所以用户可以遍历大量的param值来读取Redis中的任何内容。此外,它们还会为每个请求将值写入缓存,从而使您面临拒绝服务攻击。攻击策略是通过请求数十亿个密钥,简单地填满Redis所在机器上的所有内存。如果那台机器上还有别的东西,它也会掉下来的。
因此,尽可能多地验证,并且只使用您已经验证并知道是有限的数据来设置键。
https://stackoverflow.com/questions/32615961
复制相似问题