我想知道在rails中直接传递任意数据作为缓存名称是否安全,例如:
Rail.cache.fetch(params[:unsafe_param], expires_in: 2.hours) do
'foo'
end
我正在使用redis驱动程序,而我的担忧是关于对缓存的任何SQL-Injection
攻击,这是我不得不担心的事情,或者驱动程序本身是否进行了清理?
答案 0 :(得分:2)
这取决于你的用例,但一般的答案是肯定的。这是不安全的,因为Redis没有身份验证的概念。
键只是字符串,因此用户可以迭代大量的参数值来读取Redis中的任何内容。此外,他们还会为缓存中的每一个请求写值,从而为您提供拒绝服务攻击。攻击策略是通过请求数十亿个密钥来简单地填充Redis所在机器上的所有内存。如果该机器上还有其他东西,它也会下降。
因此,尽可能多地验证并且只使用已验证且知道有限的数据设置密钥。