我有一个带有以下域名的.net webapplication: 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,而不是第三个域?
提前致谢!
答案 0 :(得分:3)
以下是一些可以想到的选项:
#1 - 通过客户端脚本将登录请求发布到两个应用程序。这样您就可以同时为两个有效域设置cookie。这使您可以通过为要对用户进行身份验证的特定域创建Cookie来避免您担心的XSS问题。
#2 - 将“不安全”网站移至其他域。例如:www.domain-files.com。使用该选项,您可以使用共享cookie来管理身份验证。
答案 1 :(得分:2)
不要混淆会话cookie和表单身份验证cookie。 ASP.NET Session无法在应用程序之间共享。就表单身份验证cookie而言,它只是一个简单的cookie,而cookie的工作方式是设置domain
属性。
我能想到实现这一目标的一种方法是在web.config
中为两个应用程序定义特殊machineKeys。这样,在www.domain.com
上进行身份验证的用户将被发送一个cookie,该cookie将使用www.domain.com
的机器密钥加密,并且因为只有sub.domain.com
具有相同的密钥才能解密cookie。 Cookie仍会发送到files.domain.com
,但无法解密,用户也不会在那里进行身份验证。
答案 2 :(得分:1)
在我看来,问题是为什么人们可以上传可能包含XSS攻击的文件?如果他们能够做到这一点,他们可能会找到导致其他问题的方法。
最有可能的候选人在您的登录页面上有一个javascript函数,可以将凭据发送到其他服务器。所以当someoe登录到一个域时,javascript函数会同时将它们登录到另一个域。
我同意joe.liedtke的说法,他说将files.domain.com移到另一个域并完全避免这个问题。
答案 3 :(得分:0)
试试这个: Sharing asp.net authentication on different apps on different sub-domains
如下所述,只有具有匹配机器密钥的应用程序才能相互进行身份验证。因此,假设files.domain.com被赋予不同的机器密钥,它将无法解密会话cookie,并且没有权利进入其他域
答案 4 :(得分:0)
也许,它将完成您使用Response.Cookies
直接在Cookie中存储Guid值的任务,然后根据该值查询您的数据库以获取共享身份验证信息。