如何消除由于页面缓存版本导致的安全风险

时间:2010-11-14 04:42:30

标签: c# asp.net web session-variables browser-cache

请参阅链接

why does the value of session variable remain even after all the code of destruction?

在上面的问题是由我做的登录功能失败,因为浏览器正在显示页面的缓存版本,我也不知道为什么能够在一定的时间限制内执行所有功能,之后它实现了它的缓存!!

所以,

如何删除网站的缓存版本,

OR

怎么告诉我不要让我复制!

使用c#

4 个答案:

答案 0 :(得分:2)

您可以做的最多就是将expires元标记添加到您不希望浏览器缓存的页面

<META HTTP-EQUIV="EXPIRES" CONTENT="0">
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="No-Cache, No-Store">

或者在页面标记添加后的ASP.NET中交替使用

<%@ OutputCache Duration="0" Location="none" NoStore="true" %>

在C#的代码背后

Response.Cache.SetNoStore();
Response.Cache.SetExpires(DateTime.Now);
Response.Cache.SetCacheability(HttpCacheability.NoCache);

有关更多信息,请参阅http://msdn.microsoft.com/en-us/library/06bh14hk(v=VS.100).aspx

此处有一篇更详细的文章http://www.mnot.net/cache_docs/

编辑:在Alxandr的评论后更新

答案 1 :(得分:1)

听起来您关注客户端页面的缓存版本。如果这是真的,您有两种主要方法来解决这个问题。您可以向HTTP标头或页面的META标签添加no-cache属性。 HTTP标头方法是recommended approach

META标签方法

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">

HTTP标头方法

Cache-Control: max-age=3600, must-revalidate

我的以下引用链接将为您提供有关HTTP标头和META标头的丰富信息。我建议您阅读它以了解选项以及查看各种语言和HTTP服务器中的示例实现。

答案 2 :(得分:0)

Donut缓存和服务器端缓存将解决此问题。 在洞(甜甜圈中心),您验证用户的登录。如果无效,则执行重定向301到登录页面。

答案 3 :(得分:-1)

浏览器将在缓存中复制它。大喊大叫不会让它消失。除非你在其他地方做蠢事,否则这不应该是安全风险。即使你确实遇到安全问题,防止缓存无法解决问题。

所以:你可以阻止浏览器缓存,但这不是你想要做的。浏览器仍然会将网页的副本保存到硬盘中,它不会尝试显示它。这些都不是安全问题。