3

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

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

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

提前致谢!

4

5 回答 5

3

以下是我想到的几个选项:

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

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

于 2011-01-27T23:03:14.700 回答
2

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

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

于 2011-01-19T10:05:32.613 回答
1

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

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

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

于 2011-01-28T01:45:07.183 回答
0

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

于 2011-01-25T04:41:18.860 回答
0

试试这个: 在不同子域上的不同应用程序上共享 asp.net 身份验证

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

于 2011-01-21T12:05:09.637 回答