9

我使用 Google Chrome 开发人员工具中的审核功能检查了我们的 Web 应用程序。

首先,我收到一条警告,表明我们正在为静态内容提供不可缓存的服务:“以下资源明确不可缓存。如果可能,请考虑将其设为可缓存”。

为了解决这个问题,我将此片段添加到我们的 web-config

<staticContent>
    <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" />
</staticContent>

正如这篇博文中所推荐的那样:http: //blogs.msdn.com/b/carlosag/archive/2009/06/09/are-you-caching-your-images-and-scripts-iis-seo-can-tell -you.aspx

如果我现在在 google chrome 中开始新的审核,我会收到一个新警告:

以下可公开缓存的资源包含 Set-Cookie 标头。此安全漏洞可能导致 cookie 被多个用户共享。

您能否解释一下潜在的安全威胁以及 Asp.net 中可能的解决方案是什么?

[更新]

经过更多研究,我想这可能与这个问题有关:

为什么 ASP.NET 表单身份验证在静态图像请求上设置 cookie?

但我不能把拼图放在一起。情况并不完全相同,虽然我们的应用程序可以配置为使用表单身份验证,但我在使用 Windows 身份验证时收到了警告。

4

1 回答 1

4

看起来问题确实与表单身份验证有关。在对用户进行身份验证后,我们设置了一个表单身份验证 cookie。这个 cookie 没有设置路径,所以它会为每个请求发送,即使是静态图像。

即使我正在测试 Windows 身份验证,看起来我仍然拥有前一个调试会话中设置的 coockie。

我认为最好的解决方案是为 coockie 设置一条路径,以防止它被发送到静态资源。不幸的是,我无法为我们所有的服务请求定义路径,因为我们使用的是 WCF Ria 服务,并且这些服务有一个创建运行时的虚拟路径。

目前的解决方案是仅在浏览器中设置 cookie。Web 配置中的更新条目是:

<staticContent>
    <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" cacheControlCustom="private"/>
</staticContent>

重要的部分是新的 cacheControlCustom 属性。

我想这仍然可能是一个安全问题,如果一个浏览器由多个用户共享(例如在网吧?),但这不是我们项目的有效场景。

于 2012-07-05T08:30:54.310 回答