2011-01-19 85 views
3

我有以下几个方面拥有.NET web应用共享会话cookie: www.domain.com sub.domain.com files.domain.com跨越两个命名域

当用户登录到domain.com或sub.domain.com,我希望他们分享会话状态(即一次登录到两个域)。这可以通过将会话coookie上的域设置为“.domain.com”来完成。 但是,我的问题是,域名“files.domain.com”应该而不是由于安全问题(来自该域上托管的用户创建的文件的xss攻击是一个问题)而具有会话状态。

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

在此先感谢!

回答

3

这里有一对夫妇的浮现在脑海中的选项:

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

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

2

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

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

+0

它实际上是相同的应用程序,其中两个域指向相同的应用程序/服务器+路径。所以www.domain.com和sub.domain.com是平等的,而files.domain.com指向应用程序的不同虚拟文件夹。所以基本上我需要用户同时在两个域上进行身份验证sessionId – 2011-01-19 11:19:36

0

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

如下文所述,只有匹配机键应用程序将能够相互进行身份验证。因此,假设files.domain.com被赋予了不同的计算机密钥,将无法解密的会话cookie,并在那里有其他领域无权

+0

谢谢,仍然不是我正在寻找不幸的。浏览器仍然会发送cookie,从而使得例如存储在该域中的javascript文件拦截cookie - 为其他域上的会话劫持提供入口点。 – 2011-01-24 11:24:43

0

也许,它会完成你的任务,以存储GUID值在cookie中直接使用Response.Cookies,然后根据该值查询数据库以获取共享认证信息。

+0

这就是我认为的,直到我意识到单独的cookie仍然可以用于XSS攻击 – DeveloperChris 2011-01-28 01:41:51

+0

在Guid末尾添加一个标记,指示先前的请求标识。即当它是第43个请求时具有值“sessionid = {guidvalue} 43”的cookie。然后验证请求号码。 – smartcaveman 2011-01-28 07:15:00

1

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

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

我同意乔。谁说移动files.domain.com到另一个域名,并完全避免这个问题。