Rails 3 ActiveRecordStore session_id篡改

mth*_*mth 4 security ruby-on-rails session-cookies tampering ruby-on-rails-3

我在Rails 3.0.9中共同开发一个简单的Web应用程序,我已经意识到可能通过恶意请求篡改session_id.请注意,这是我的第一个RoR应用程序,因此我的概念可能完全错误.

当前的应用程序功能需要会话,因此我转向ActiveRecordStore会话存储,安装它并开始在原始工作流程中进行测试.我注意到Rails框架使用_session_id一些随机类似哈希的字符串的名称和值创建cookie (在DB SESSION表中,此字符串对应于session_id列).

如果更改了cookie中的值,例如使用Firebug,则当前会话ID将更改为随cookie提供的数据(检查过request.session_options[:id]),并且更改将传播到数据库表,从而创建具有上述参数的新会话记录.

虽然这不会对会话的变量产生任何影响,但会话ID已经从其通常的类似哈希的外观偏离到用户篡改的外观.

这是一个问题 - 如何检测或优先防止这种行为?

die*_*mes 5

要回答您的问题,了解session-id生成方式的机制非常重要.(来自文档)

会话ID由随机字符串的哈希值组成.随机字符串是当前时间,0到1之间的随机数,Ruby解释器的进程ID号(也基本上是随机数)和常量字符串.目前,暴力破解Rails的会话ID是不可行的.到目前为止,MD5并没有受到影响,但是存在冲突,因此理论上可以创建具有相同散列值的另一个输入文本.但迄今为止这没有任何安全影响.

因此会话ID被设计为加密"难以猜测".攻击者可以更改session_id,但他们的想法是他们永远无法猜出有效的会话.

如何防止这种情况?

基于上述逻辑,如果降低会话到期时间,则会有相当少的"实时"session_id.因此,攻击者更难以随机选择可用的ID.

如何检测到这种行为?

最简单的方法是使用无效(未过期)的会话ID记录所有请求.如果您看到大量此类请求涌入,则有人可能会尝试获取不属于他们自己的会话.

  • 我没有看到证据表明MD5的弱点会导致rails会话ID系统出现问题.但是,如果我想要认真对待,我不会说MD5是不妥协的.安全性真的归结为随机数,因为其他的相对容易猜测.我知道Ruby的随机数非常好,但不是加密安全的. (2认同)