使用Rack :: Session :: Pool存储的cookie的秘密

时间:2013-02-12 16:33:51

标签: ruby sinatra rack

来自Rack::Session::Cookie的{​​{3}}包含以下有关未设置机密以检查Cookie完整性的警告:

  

没有为Rack :: Session :: Cookie提供秘密选项。   这构成了安全威胁。强烈建议你   提供一个秘密,以防止可能从精心设计的漏洞利用   饼干。

使用Rack::Session::Cookie模块时,您可以这种方式设置机密:

use Rack::Session::Cookie, secret: 'change_me'

但是,我使用Rack::Session::Pool,其中"提供简单的基于Cookie的会话管理。"我假设我还需要提供一个秘密,但无法找到相关的例子。源代码/文档也不是很有帮助。有没有人知道是否需要这样做,以及如果这样做会如何实现?

1 个答案:

答案 0 :(得分:2)

如果你看一下this question and answer CookiePool之间的差异{+ 3}},就会指出只保留“id”(实际上是SID)在cookie中,其他一切都保存在内存中。如果数据在内存中,则生成HMAC的要求比存储在cookie中的要低得多,如果真的需要,那么我认为它已经由你完成了。

我查看了the source,而Pool并未查找作为选项传递的秘密,但是Cookie会这样做。

我相信通过阅读Pool的来源,每次都会生成一个唯一的SID,因此您的数据中不会显示任何键/ ID。

作为旁注,如果您打算选择使用Cookie,encrypt them