4

我正在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 已经从其通常的类似哈希的外观偏离了用户篡改的外观。

问题来了——如何检测或最好防止这种行为?

4

1 回答 1

5

要回答您的问题,了解如何生成会话 ID 的机制很重要。(来自文档

会话 ID 由随机字符串的哈希值组成。随机字符串是当前时间,一个介于 0 和 1 之间的随机数,Ruby 解释器的进程 id 号(也基本上是一个随机数)和一个常量字符串。目前,暴力破解 Rails 的会话 ID 是不可行的。迄今为止,MD5 是不妥协的,但已经发生了冲突,因此理论上可以创建另一个具有相同哈希值的输入文本。但这到目前为止还没有安全影响。

因此,会话 ID 被设计为加密“难以”猜测。攻击者可以更改 session_id,但其想法是他们永远猜不到有效会话。

如何防止这种情况?

基于上述逻辑,如果您降低会话过期时间,“活动”会话 ID 将大大减少。因此,攻击者更难随机选择可用的 id。

如何检测到这种行为?

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

于 2011-07-07T22:58:33.513 回答