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已经从其通常的类似哈希的外观偏离到用户篡改的外观.
这是一个问题 - 如何检测或优先防止这种行为?
要回答您的问题,了解session-id生成方式的机制非常重要.(来自文档)
会话ID由随机字符串的哈希值组成.随机字符串是当前时间,0到1之间的随机数,Ruby解释器的进程ID号(也基本上是随机数)和常量字符串.目前,暴力破解Rails的会话ID是不可行的.到目前为止,MD5并没有受到影响,但是存在冲突,因此理论上可以创建具有相同散列值的另一个输入文本.但迄今为止这没有任何安全影响.
因此会话ID被设计为加密"难以猜测".攻击者可以更改session_id,但他们的想法是他们永远无法猜出有效的会话.
如何防止这种情况?
基于上述逻辑,如果降低会话到期时间,则会有相当少的"实时"session_id.因此,攻击者更难以随机选择可用的ID.
如何检测到这种行为?
最简单的方法是使用无效(未过期)的会话ID记录所有请求.如果您看到大量此类请求涌入,则有人可能会尝试获取不属于他们自己的会话.