2008-09-15 39 views
24

我有一些网站需要登录并显示敏感信息。有没有办法让一个人一旦注销但是点击“后退”按钮就不会呈现页面?

此人进入页面,提示登录,然后查看信息。

该人员退出该网站,并被重定向回登录页面。

此人可以击中“返回”并返回到包含敏感信息的页面。由于浏览器只是将其视为呈现的HTML,所以它向他们展示没有问题。

当人从注销的屏幕上点击“后退”按钮时,是否有办法阻止显示信息?我并不是试图禁用后退按钮本身,我只是试图让敏感信息不再被显示,因为该人没有登录到网站了。

为了说明方便,上面的站点/场景位于带有窗体身份验证的ASP.NET中(因此,当用户转到第一个页面时,他们将被重定向到登录页面 - 在有区别的情况下)。

回答

13

简而言之,它不能安全地完成。

但是,有很多技巧可以实现,使用户很难反击并获取敏感数据。

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetExpires(Now.AddSeconds(-1)); 
Response.Cache.SetNoStore(); 
Response.AppendHeader("Pragma", "no-cache"); 

这将在客户端禁用缓存,然而这并非所有浏览器都支持

如果您在使用AJAX那么敏感数据的选项可以使用从客户端代码更新的UpdatePanel来获取的,因此打回来时,除非客户端在仍处于登录状态也不会被显示出来。

3

aspdev.org

添加以下行的Page_Load事件处理程序的顶部和ASP.NET页面将不会在用户的浏览器缓存:

Response.Cache.SetCacheability(HttpCacheability.NoCache) 

设置该属性可确保当用户点击后退按钮,内容将消失,如果他按下“刷新”,他将被重定向到登录页面。

0

你正在寻找一个no-cache指令:

<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> 

如果你有一个母版页设计去,这可能是忙里忙外的一点点,但我相信你可以把这个指令在一个页面上,而不会影响你的网站的其余部分(假设这是你想要的)。

如果你已经有了这个指令集,浏览器会忠实地回到服务器寻找一个全新的页面副本,这会让你的服务器看到用户没有通过身份验证,并且让他碰到登录页面。

0

退出操作是否为POST。然后浏览器会提示“您确定要重新发布表单吗?”而不是显示该页面。

0

我不知道该怎么做,在ASP.NET但在PHP我会做这样的事情:

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
header("Cache-Control: no-cache"); 
header("Pragma: no-cache"); 

迫使浏览器重新检查该项目,所以您的验证检查应被触发,拒绝用户访问。

0

正确的答案涉及到在响应中设置HTTP Cache-Control标头。如果你想确保他们永不缓存输出,你可以做Cache-Control:no-cache。这通常与无商店协调使用。

其他选项,如果你想有限的缓存,包括设置过期时间和必须重新验证,但这些可能会导致一个缓存页面再次显示。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4

0

这是一个有点拉伤,但如果你有一个Java小程序或嵌入和验证的Flash应用程序是通过做,你可以把它使他们不得不来认证,ERM ,每次他们想要查看信息时,都需要与服务器进行'实时'。

使用这个你也可以加密任何信息。

总有这种可能性,有人可以保存页面上的敏感信息,没有缓存不会解决这种情况(但总是可以获取Flash或Java应用程序的屏幕截图)。

0

出于完整性:

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

DannySmurf,<元>当涉及到控制缓存,和附注特别更是如此元素是极不可靠。 Reference

1

dannyp等人,no-cache不会阻止缓存存储敏感资源。它仅仅意味着一个缓存不能为它存储的资源提供服务,而不必首先重新验证它。如果您希望防止敏感资源被缓存,则需要使用no-store指令。

0

那么,在一家以世界上最安全高效的家庭银行软件之一而闻名的巴西主要银行公司(Banco do Brasil),他们只是简单地将history.go(1)放在每一页中。 ,如果你点击后退按钮,你将被退回。简单。

+0

我认为有可能使用调试器或类似的东西来做一种Javascript hack跳过这个命令。 – 2008-09-24 07:48:50

+0

是的,但如果用户使用小后退箭头返回3步会发生什么?几乎没有办法做事。 – LordOfThePigs 2009-04-20 09:58:24

9

Cache and history are independent一个不应该互相影响。

唯一的例外made for banks是HTTPS和Cache-Control: must-revalidate组合在历史导航时强制刷新。

在纯HTTP中,除了利用浏览器错误之外,没有办法做到这一点。

你可以使用JavaScript来检查document.cookie并在设置“杀手”cookie时重定向,但我想如果浏览器没有按预期设置/清除cookie,这可能会严重错误。

0

您可以将敏感网页作为HTTP POST返回,然后在大多数情况下,浏览器会向您发送询问您是否要重新提交数据的消息。 (不幸的是,我找不到这种行为的典型来源。)

0

我刚刚考虑了银行业务的例子。

我的银行的页面有这个在它:

<meta http-equiv="expires" content="0" /> 

这应该是关于这个我想。

1

您可以通过javascript函数执行快速服务器检查(ajax),如果用户未登录,则会擦除当前页面并用消息替换它。这显然对于JavaScript关闭的用户而言很脆弱,但这种情况非常罕见。好处是,这是浏览器和服务器技术(asp/php等)不可知论的。

相关问题