【问题标题】:Sharing session cookie across two named domains跨两个命名域共享会话 cookie
【发布时间】:2011-06-11 15:37:40
【问题描述】:

我有一个具有以下域的 .net 网络应用程序: www.domain.com sub.domain.com 文件.domain.com

当用户登录到 domain.com 或 sub.domain.com 时,我希望他们共享会话状态(即同时登录到两个域)。这可以通过将会话 cookie 上的域设置为“.domain.com”来实现。 但是,我的问题是域“files.domain.com”由于安全问题应该具有会话状态(来自托管在该域上的用户制作的文件的 xss 攻击是一个问题)。 p>

是否可以在 ASP.NET 中为这两个域使用相同的 asp.net 会话 ID,但不能为第三个域使用相同的 asp.net 会话 ID?

提前致谢!

【问题讨论】:

    标签: asp.net session security session-cookies


    【解决方案1】:

    在我看来,问题是为什么人们可以上传可能包含 XSS 攻击的文件?如果他们能做到这一点,他们可能会找到引起其他问题的方法。

    最有可能的候选人是在您的登录页面上具有将凭据发送到其他服务器的 javascript 函数。所以当 someoe 登录到一个域时,javascript 函数会将它们同时登录到另一个域。

    我同意 joe.liedtke 的观点,他说将 files.domain.com 移至另一个域并完全避免该问题。

    【讨论】:

      【解决方案2】:

      我想到了以下几个选项:

      #1 - 通过客户端脚本将您的登录请求发布到两个应用程序。这将使您能够同时为两个有效域设置 cookie。这使您可以通过为您希望用户进行身份验证的特定域创建 cookie 来避免您担心的 XSS 问题。

      #2 - 将您的“不安全”网站移至其他域。例如:www.domain-files.com。使用该选项,您可以使用共享 cookie 来管理身份验证。

      【讨论】:

      • 是的,移动文件域当然是要走的路,但不确定我是否能接受。向我可以做的两个域发布登录请求,谢谢乔!
      【解决方案3】:

      也许,您可以使用Response.Cookies 直接在cookie 中存储Guid 值,然后根据该值查询您的数据库以获取共享身份验证信息。

      【讨论】:

      • 这就是我的想法,直到我意识到一个单独的 cookie 仍然可以用于 XSS 攻击
      • 在 Guid 末尾添加一个标记,指示上一个请求 ID。即,当它是第 43 个请求时,值为“sessionid={guidvalue}43”的 cookie。然后验证请求号。
      【解决方案4】:

      试试这个: Sharing asp.net authentication on different apps on different sub-domains

      如下所述,只有具有匹配机器密钥的应用程序才能相互进行身份验证。因此,假设 files.domain.com 被赋予了不同的机器密钥,它将无法解密会话 cookie,并且无权访问其他域

      【讨论】:

      • 谢谢,不幸的是,这仍然不是我想要的。浏览器仍将发送 cookie,从而启用例如存储在该域上的 javascriptfiles 以拦截 cookie - 为其他域上的会话劫持提供入口点。
      【解决方案5】:

      不要混淆会话 cookie 和表单身份验证 cookie。 ASP.NET 会话不能在应用程序之间共享。就表单身份验证cookie而言,它只是一个简单的cookie,cookie的工作方式是通过设置domain属性。

      我能想到的一种方法是在web.config 中为两个应用程序定义特殊的machineKeys。这样,在www.domain.com 上进行身份验证的用户将被发送一个 cookie,该 cookie 将使用 www.domain.com 的机器密钥加密,因为只有 sub.domain.com 具有相同的密钥才能解密 cookie。 cookie 仍将被发送到files.domain.com,但它无法解密它并且用户不会在那里进行身份验证。

      【讨论】:

      • 其实是同一个应用,两个域指向同一个应用/服务器+路径。所以 www.domain.com 和 sub.domain.com 是相等的,而 files.domain.com 指向应用程序的不同虚拟文件夹。所以基本上我需要用户在具有相同 sessionId 的两个域上进行身份验证
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 2013-02-15
      相关资源
      最近更新 更多