将任意数据传递到rails缓存

时间:2015-09-16 18:23:20

标签: ruby-on-rails redis

我想知道在rails中直接传递任意数据作为缓存名称是否安全,例如:

Rail.cache.fetch(params[:unsafe_param], expires_in: 2.hours) do
    'foo'
end

我正在使用redis驱动程序,而我的担忧是关于对缓存的任何SQL-Injection攻击,这是我不得不担心的事情,或者驱动程序本身是否进行了清理?

1 个答案:

答案 0 :(得分:2)

这取决于你的用例,但一般的答案是肯定的。这是不安全的,因为Redis没有身份验证的概念。

键只是字符串,因此用户可以迭代大量的参数值来读取Redis中的任何内容。此外,他们还会为缓存中的每一个请求值,从而为您提供拒绝服务攻击。攻击策略是通过请求数十亿个密钥来简单地填充Redis所在机器上的所有内存。如果该机器上还有其他东西,它也会下降。

因此,尽可能多地验证并且只使用已验证且知道有限的数据设置密钥。