如何理解谷歌浏览器中针对 Asp.net 提供的静态资源的安全警告



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

首先,我收到一条警告,指示我们正在提供不可缓存的静态内容:"以下资源明确不可缓存。如果可能,请考虑使缓存"。

为了解决这个问题,我将此代码片段添加到我们的网络配置中

<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

如果我现在在谷歌浏览器中开始新的审核,我会收到一个新的警告:

以下可公开缓存的资源包含设置饼干 页眉。此安全漏洞可导致 Cookie 由 多个用户。

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

[更新]

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

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

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

看起来问题确实与表单身份验证有关。对用户进行身份验证后,我们设置了一个表单身份验证coockie。此coockie没有设置路径,因此它将针对每个请求发送,即使是静态图像。

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

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

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

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

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

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

最新更新