小编mhe*_*ess的帖子

检测Rails 4会话cookie篡改

背景

我是一位经验丰富的Web开发人员(主要使用Python和CherryPy)之前从头开始实施安全会话管理,现在正在学习Rails.我正在调查Rails会话的行为,这些行为是由实例和视图上下文中session可用的对象公开的ActionController.

问题/问题

我已经读过Rails 4中的会话的默认实现使用加密和防篡改的cookie.很酷,我想这意味着我可以使用它来保存用户会话的用户ID,而不必担心会话伪造(防篡改)或任何人能够找出他们的ID(加密).我想对此进行测试,看看如果会话cookie被更改,rails会做什么.

于是,我去了,使用浏览器插件改变会话cookie属性的内容,当我重新加载页面与新的cookie值,Rails的只是开心地给了我不同的新值session_id和_csrf_token.

会话cookie完整性发生了什么变化!?

铁路不应该检测(通过HMAC签名)cookie被改变,然后以某种方式告诉我它吗?

我很害怕我错过了一些非常明显的东西,但我一直没有在网上寻找答案,而且源代码也没有轻易放弃(我是ruby的新手).提前致谢.

本实验

我创建了一个新应用并生成了一个带有index动作的控制器:

$ rails new my_app
$ cd my_app; rails g controller home index
Run Code Online (Sandbox Code Playgroud)

然后我将这两行添加到app/views/layouts/application.html.erb文件中:

<%= session.keys %><br/>
<%= session.values %>
Run Code Online (Sandbox Code Playgroud)

我启动了开发服务器,并将浏览器导航到"localhost:3000/home/index".正如预期的那样,页面底部有以下几行:

["session_id", "_csrf_token"]
["8c1558cabe6c86cfb37d6191f2e03bf8", "S8i8/++8t6v8W8RMeyvnNu3Pjvj+KkMo2UEcm1oVVZg="]
Run Code Online (Sandbox Code Playgroud)

重新加载页面会给我相同的值,尽管应用程序_my_app_session每次都会设置cookie属性的新值.这对我来说似乎很奇怪,但我得到了相同的会话哈希值,所以我觉得它很酷.

然后,我使用Chrome的Cookie编辑附加​​组件来更改_my_app_sessioncookie属性的值(替换属性值的第一个字符).重新加载页面会显示完全不同的值,而不会发生任何事情.WAT?

ruby cookies session ruby-on-rails ruby-on-rails-4

13
推荐指数
1
解决办法
2854
查看次数

标签 统计

cookies ×1

ruby ×1

ruby-on-rails ×1

ruby-on-rails-4 ×1

session ×1