ASP.NET Webforms - 关闭缓存,但仅适用于 "pages",不适用静态内容
ASP.NET Webforms - turn off caching, but only for "pages", no for static content
对于我们的一个项目,我们的客户 运行 "pen test" 在 ASP.NET Webforms 4.0 应用程序中发现了一些他们希望我们修复的安全问题。
迄今为止引起最多讨论的是发现该应用程序允许缓存页面和内容,这可能会导致未经授权的用户看到他们不应该看到的数据(这就是 "Pen Test" 粗略地说)。
建议 "fix" 将 cache-control
和 pragma
HTTP headers 设置为 no-cache
以避免此类缓存,方法是将其添加到我的 web.config
:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Cache-Control" value="no-cache, no-store, must-revalidate, private"/>
<add name="Pragma" value="no-cache"/>
<add name="Expires" value="-1"/>
</customHeaders>
</httpProtocol>
</system.webServer>
但我不太愿意在全局范围内执行此操作 - 这是否也会关闭应用程序的任何图像缓存、Javascript 和 CSS 文件?这可能会对网站性能产生重大的负面影响 - 不是吗?
那我可以做点什么吗"in between"?防止缓存实际的 ASP.NET 页面及其显示的数据,但仍然保留静态内容的缓存?如果可能的话:我必须设置什么 headers 才能实现此目的?
谢谢!
如果您正在使用网站母版页或扩展了页面 class 并使用扩展页面 class 创建了页面,那么您可以将代码放在适当的 Page_Load事件。
Response.Cache.SetCacheability(HttpCacheability.NoCache); //Cache-Control : no-cache, Pragma : no-cache
Response.Cache.SetExpires(DateTime.Now.AddDays(-1)); //Expires : date time
Response.Cache.SetNoStore(); //Cache-Control : no-store
Response.Cache.SetProxyMaxAge(new TimeSpan(0, 0, 0)); //Cache-Control: s-maxage=0
Response.Cache.SetValidUntilExpires(false);
Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);//Cache-Control: must-revalidate
对于我们的一个项目,我们的客户 运行 "pen test" 在 ASP.NET Webforms 4.0 应用程序中发现了一些他们希望我们修复的安全问题。
迄今为止引起最多讨论的是发现该应用程序允许缓存页面和内容,这可能会导致未经授权的用户看到他们不应该看到的数据(这就是 "Pen Test" 粗略地说)。
建议 "fix" 将 cache-control
和 pragma
HTTP headers 设置为 no-cache
以避免此类缓存,方法是将其添加到我的 web.config
:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Cache-Control" value="no-cache, no-store, must-revalidate, private"/>
<add name="Pragma" value="no-cache"/>
<add name="Expires" value="-1"/>
</customHeaders>
</httpProtocol>
</system.webServer>
但我不太愿意在全局范围内执行此操作 - 这是否也会关闭应用程序的任何图像缓存、Javascript 和 CSS 文件?这可能会对网站性能产生重大的负面影响 - 不是吗?
那我可以做点什么吗"in between"?防止缓存实际的 ASP.NET 页面及其显示的数据,但仍然保留静态内容的缓存?如果可能的话:我必须设置什么 headers 才能实现此目的?
谢谢!
如果您正在使用网站母版页或扩展了页面 class 并使用扩展页面 class 创建了页面,那么您可以将代码放在适当的 Page_Load事件。
Response.Cache.SetCacheability(HttpCacheability.NoCache); //Cache-Control : no-cache, Pragma : no-cache
Response.Cache.SetExpires(DateTime.Now.AddDays(-1)); //Expires : date time
Response.Cache.SetNoStore(); //Cache-Control : no-store
Response.Cache.SetProxyMaxAge(new TimeSpan(0, 0, 0)); //Cache-Control: s-maxage=0
Response.Cache.SetValidUntilExpires(false);
Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);//Cache-Control: must-revalidate