【问题标题】:Sharing ASP.NET_SessionId and .ASPXAUTH cookie security risk共享 ASP.NET_SessionId 和 .ASPXAUTH cookie 安全风险
【发布时间】:2013-12-02 14:47:43
【问题描述】:

我们正在为一家大公司开发一种 SAAS 解决方案,在该解决方案中,医生可以查看患者并进行突变、订购产品、提供许可。 该项目适用于一家伞式公司下的 4 家独立公司。我们为每家公司开发了一个门户。所有门户都使用相同的代码,但有一个严格分开的数据库,因为该数据库包含所有患者信息。 我们将 Sitecore 用作 CMS。

客户决定在生产环境中使用虚拟文件夹而不是子域。我们的暂存环境 url 例如:acc-portal1.umbrella.com。对于生产环境,他们需要一个 URL,例如:acc.umbrella.com/portal1。一个 SSL 证书正用于所有门户和请求。

我们正在使用 Membership Provider(表单身份验证)对用户进行身份验证。由于使用了分离的数据库,用户不能在例如portal1 和portal3 中使用相同的帐户登录。 因为我们正在使用表单身份验证,所以正在使用“.ASPXAUTH”cookie。当然也使用了“ASP.NET_SessionId”cookie。

因为客户端想要使用虚拟文件夹而不是子域,所以 cookie 在所有门户上共享。可以在 web.config 中的节点上设置“路径”,但此路径由 Sitecore 动态读取并在管道中解析。在 web.config 中加载此路径后,我没有找到覆盖此路径的方法。我也没有找到改变 ASP.NET_SessionId cookie 路径的方法。

我的问题是:通过多个门户共享这些 cookie 是否存在(安全)风险(请记住,它们应该完全分开)?此设置可能会导致任何其他问题吗?

希望有人能帮忙!

【问题讨论】:

    标签: asp.net security cookies sitecore session-cookies


    【解决方案1】:

    是的,存在巨大的安全风险。您所做的称为多租户应用程序。您必须采取特殊措施来确保无法共享 Cookie 和其他敏感数据。

    我的建议是将租户名称 (portal1) 存储在表单身份验证 cookie 的自定义数据部分。您在发出表单 cookie 时设置自定义数据。

    然后,有一个自定义模块或只是一个 Application_AuthorizeRequest 事件的处理程序,其中已经根据 cookie 建立了身份。

    在您的处理程序中,您从 cookie 中解密表单身份验证票证,检索用户数据并与实际 url 进行比较。如果有匹配 - 什么都不会发生。如果没有匹配,则意味着用户在一个门户中通过了身份验证,但尝试访问另一个门户。您可以轻轻清除响应并呈现一条消息“好吧,此门户不适合您”,或者只是将用户注销。

    【讨论】:

    • 我同意 - 在同一个域下共享内容是个坏主意(因为 SOP 通常有助于保护其他站点免受漏洞的影响,例如一个站点中的 XSS)。
    猜你喜欢
    • 2011-01-29
    • 2012-02-18
    • 2017-06-06
    • 2014-02-03
    • 2012-05-13
    • 2014-11-15
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    相关资源
    最近更新 更多