会话固定

时间:2010-05-23 05:59:13

标签: ruby-on-rails

我是网络开发的新手,并试图抓住安全问题。我在http://guides.rubyonrails.org/security.html上阅读了这篇文章,这些是作者提到攻击者如何修复会话的一些步骤。

  1. 攻击者创建一个有效的会话ID:他加载要修复会话的Web应用程序的登录页面,并从响应中获取cookie中的会话ID(请参见图像中的数字1和2)。
  2. 他可能维持会议。过期会话,例如每20分钟一次,大大缩短了攻击的时间范围。因此,他会不时访问Web应用程序,以使会话保持活动状态。
  3. 现在,攻击者将强制用户的浏览器使用此会话ID(请参阅图像中的数字3)。由于您可能无法更改另一个域的cookie(因为相同的源策略),因此攻击者必须从目标Web应用程序的域运行JavaScript。通过XSS将JavaScript代码注入应用程序可以完成此攻击。这是一个例子:< script>的document.cookie = “_ SESSION_ID = 16d5b78abb28e3d6206b60f22a03c8d9”; < /脚本取代。稍后阅读有关XSS和注射的更多信息。
  4. 攻击者使用JavaScript代码将受害者诱骗到受感染的页面。通过查看页面,受害者的浏览器会将会话ID更改为陷阱会话ID。
  5. 由于新的陷阱会话未使用,因此Web应用程序将要求用户进行身份验证。
  6. 从现在开始,受害者和攻击者将在同一会话中共同使用Web应用程序:会话生效,受害者没有注意到攻击。
  7. 我不明白几点。

    1. 为什么用户在步骤5中登录,因为会话是通过?
    2. 发送的
    3. 我在wiki上看到了可能的解决方案,例如用户属性检查和其他。为什么我们只是为在步骤5中输入用户名和密码时登录的用户重置会话?

1 个答案:

答案 0 :(得分:1)

1)攻击者在步骤1和2中收到一个尚未登录的会话。这是陷阱会话。在步骤5,受害者登录认为会话ID是新的(和'秘密')。在受害者登录的那一刻,攻击者能够重新使用“秘密”会话ID并有效地登录。

所以回答你的问题:让受害者登录,因为陷阱会话尚未登录,以便欺骗受害者使用此会话ID登录。

2)在解释了会话固定的步骤之后,第一个对策(第2.8节)是创建一个新会话并在登录后放弃旧会话。正是你的想法!