【问题标题】:Can different subdomains of the same app prevent malicious attack like XSS?同一个app的不同子域能否防止XSS之类的恶意攻击?
【发布时间】:2015-05-06 03:42:47
【问题描述】:

在我的 Rails 应用程序中,我有 2 个子域,

一个:members.myapp.com这是所有成员之间共享的区域(他们可以登录和管理他们的帐户)

二:每个成员在这样的子域上都有自己的网站:member1.myapp.commember2.myapp.commember3.myapp。 com 等...

假设user1.myapp.com在他的站点运行恶意js代码,members.myapp.com会不会受到XSS或其他攻击?

【问题讨论】:

    标签: security xss same-origin-policy


    【解决方案1】:

    他们将能够设置members.myapp.com 可以读取的cookie - 因此,如果他们是members.myapp.com 上的任何cookie 处理漏洞,那么他们可能会利用这些漏洞。 cookie 中毒的一个例子可能是session fixation

    除非两个域都选择加入,否则 XSS 是不可能的。即它们都必须包含以下代码。

    document.domain = 'myapp.com';
    

    除非members.myapp.com 这样做,否则Origin 不会在子域之间共享。

    cookie 处理漏洞示例

    如前所述,一种类型是Session Fixation

    现在,假设攻击者访问 members.myapp.com 并获得一个随机会话 cookie:set-cookie: session_id=123456

    攻击者随后向管理员发送一封电子邮件,称其域 user1.myapp.com 存在问题。

    攻击者在user1.myapp.com上托管了一些JavaScript代码:

    document.cookie = "session_id=123456;domain=myapp.com";
    

    受害者(myapp.com 的管理员)进入攻击者的页面并接收 cookie。

    管理员稍后会转到members.myapp.com 并登录到他们的管理员级别帐户。然而,由于攻击者在一个 cookie 中提供了攻击者的会话 ID (123456),members.myapp.com 可以读取(因为它被设置为myapp.com 级别),所以攻击者现在以管理员身份登录。即攻击者设法让管理员共享他的会话,所以当管理员登录时,共享他的会话的攻击者也登录了。

    这只是 cookie 处理漏洞的一个示例。在这种情况下,系统应该在登录后发出一个新的会话cookie,以防止会话固定攻击。

    【讨论】:

    • 感谢您的回答,我接受了您的回答,但我仍然不太明白“如果它们是 members.myapp.com 上的任何 cookie 处理漏洞”是什么意思!如果您能详细解释一下,我将不胜感激:)谢谢
    • @medBo:没问题。已添加示例。
    • @SliverlightFox 非常感谢您的解释,在 ruby​​ on rails 中,当我登录 memebers.myapp.com 然后我转到 myapp.com 我注意到我不再登录因为它无法从 members.myapp.com 读取 cookie(它们具有不同的范围),所以对于登录,我只使用默认情况下在 rails 中加密的“会话”。这还不足以保护我吗?
    • 我也发现这个帖子看起来和我的情况很相似(你认为答案是否正确):security.stackexchange.com/questions/15734/…
    • @medBo:恐怕不会。将 cookie 设置为 .myapp.com 级别的是攻击者。当 Web 服务器读取 cookie 时,它​​无法读取 cookie 的域,因此它不会知道它是攻击者设置的 cookie。在这种情况下,您需要在登录后创建一个新的会话 ID。
    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多