【问题标题】:Is is possible to spoof a session with JavaScript + Cookies?是否可以使用 JavaScript + Cookies 来欺骗会话?
【发布时间】:2010-01-12 04:54:56
【问题描述】:

假设您有一个网络应用程序,它在子域(例如:awesome.super-cms.com)上为用户提供他们自己的网站,并且您让他们编辑 HTML。进一步假设您在通配符子域 cookie(“*.super-cms.com”)中设置 SessionID。

管理evil.super-cms.com 的用户可以轻松编写一个从其他 super-cms.com 用户那里获取 SessionID 的 JavaScript:

var session = $.cookie('SessionID');
// Now send `session` to evil.com

我的问题是:攻击者是否可以利用这些获取的 SessionID 做坏事?例如,以其他用户身份欺骗身份验证?

【问题讨论】:

    标签: javascript security http authentication


    【解决方案1】:

    是的,他们可以。这家伙似乎有一篇文章概述了示例:http://skeptikal.org/2009/11/cross-subdomain-cookie-attacks.html

    您可以设置 cookie 的域来防止这种情况。它在 cookie 中设置为 ;domain=...,您给定的语言可能有能力直接执行此操作。

    【讨论】:

    • 谢谢。我们正在使用 Django,它允许您设置 SESSION_COOKIE_DOMAIN 来执行此操作。然而,不幸的情况是,因为我们真的希望让用户跨子域进行身份验证。
    • Kyle:您仍然可以跨域进行身份验证,但只需要多做一点工作(确保到其他域的所有链接都包含一个特殊的查询字符串,然后适当地验证它(它比这更复杂) ,但这是一般的想法,或者至少是类似的东西))。您想要的是他们访问彼此的 cookie。
    【解决方案2】:

    攻击者能否利用这些收获的 SessionID 做坏事?

    是的,但要避免这种情况很容易:

    • 不要使用通配符 cookie
    • 在任何 cookie 上设置 http only 标志

    我假设您在 SSL 之上运行它(否则它已经很容易受到 MITM 攻击)在这种情况下,设置 SSL only 标志也是一个好主意。

    请注意,您不能依赖客户端 IP 地址不会在会话中更改(某些 ISP 使用负载平衡代理),但浏览器标头不会更改 - 但这无助于来自某人的攻击知道他们在做什么。

    C.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      相关资源
      最近更新 更多