共享ASP.NET_SessionId和.ASPXAUTH cookie安全风险

时间:2013-11-19 06:46:16

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

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

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

我们正在使用成员资格提供程序(表单身份验证)来验证用户。由于使用了分离的数据库,用户无法使用例如portal1和portal3中的同一帐户登录。 因为我们正在使用formsauthentication,所以正在使用“.ASPXAUTH”cookie。当然也使用“ASP.NET_SessionId”cookie。

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

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

希望有人可以帮忙!

1 个答案:

答案 0 :(得分:3)

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

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

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

在处理程序中,您从cookie解密表单身份验证票证,检索用户数据并与实际URL进行比较。如果有匹配 - 没有任何反应。如果没有匹配,则表示用户在一个门户中进行了身份验证,但尝试访问另一个门户。您可以轻轻地清除响应并发送消息"好吧,此门户网站不适合您和#34;或者只是将用户注销。