Is there a way to keep a page from rendering once a person has logged out but hit the “back” button?我有一些网站需要登录并显示敏感信息。 该人员进入页面,提示登录,然后查看信息。 该人退出站点,然后重定向回登录页面。 然后,此人可以单击"后退"并直接返回到包含敏感信息的页面。由于浏览器只是将其视为呈现的HTML,因此可以毫无问题地显示给他们。 当有人从注销的屏幕上单击"后退"按钮时,是否有办法防止显示该信息?我并不是要禁用后退按钮本身,而是只是为了防止再次显示敏感信息,因为该人不再登录该网站。 出于争论的考虑,上述站点/场景位于具有表单身份验证的ASP.NET中(因此,当用户转到第一页(即他们想要的页面)时,他们将被重定向到登录页面-如果发生这种情况,差异)。 简短的答案是它不能安全地完成。 但是,可以采用许多技巧来使用户难以回击并显示敏感数据。
这将禁用客户端的缓存,但是并非所有浏览器都支持。 如果可以选择使用AJAX,则可以使用从客户端代码更新的updatepanel检索敏感数据,因此,除非客户端仍然登录,否则在回击时将不会显示敏感数据。 缓存和历史记录是独立的,不应互相影响。
银行唯一的例外是,在历史记录中导航时,HTTPS和 在纯HTTP中,除了利用浏览器错误外,没有其他方法可以做到这一点。
您可以使用Java技术来检查它,并检查 从aspdev.org: 在Page_Load事件处理程序的顶部添加以下行,您的ASP.NET页将不会缓存在用户浏览器中:
设置此属性可确保如果用户单击后退按钮,则内容将消失,并且如果用户单击"刷新",则将其重定向到登录页面。 dannyp等,no-cache不会阻止缓存存储敏感资源。这仅意味着高速缓存无法服务于已存储的资源,而无需先对其进行重新验证。如果希望防止缓存敏感资源,则需要使用no-store指令。 DannySmurf中的元素在控制缓存方面极其不可靠,尤其是Pragma。参考。 您可能有一个javascript函数来执行快速服务器检查(ajax),如果用户未登录,则擦除当前页面并用消息替换它。显然,这对不支持javascript的用户来说很脆弱,但这很少见。从好的方面来说,这与浏览器和服务器技术(asp / php等)无关。 好吧,在一家以拥有世界上最安全,最高效的家庭银行软件之一而闻名的巴西大型银行公司(Banco do Brasil)中,他们只需在每一页中都插入history.go(1)。后退按钮,您将返回。简单。 请查看HTTP响应标头。人们发布的大多数ASP代码看起来都是在设置这些代码。 O'Reilly的花栗鼠书是HTTP的圣经,而Chris Shiflett的HTTP书也不错。 您可以将带有敏感内容的网页作为HTTP POST返回,然后在大多数情况下,浏览器会向您显示消息,询问您是否要重新提交数据。 (不幸的是,我找不到这种行为的规范来源。) 我只是想起银行业的例子。 我银行的页面上有这个:
我想应该是关于这个的。 这有点麻烦,但是如果您有一个嵌入式的Java applet或Flash应用程序并且通过身份验证完成,则可以这样做,以便他们每次必须通过服务器"实时"进行身份验证。他们想查看信息。 使用此方法,您还可以加密任何信息。 总是存在这样的可能性,即有人可以只保存带有敏感信息的页面,没有缓存并不能解决这种情况(但是,可以始终从Flash或Java应用程序中截取屏幕截图)。 正确答案包括使用在响应上设置HTTP Cache-Control标头。如果要确保它们从不缓存输出,则可以执行Cache-Control:no-cache。这通常也与无商店配合使用。 其他选项(如果要限制缓存)包括设置过期时间和必须重新验证,但是这些可能都可能导致再次显示缓存的页面。 参见http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4 我不知道如何在ASP.NET中执行此操作,但是在PHP中我会执行以下操作:
这将迫使浏览器重新检查该项目,因此应触发身份验证检查,从而拒绝用户访问。
使注销操作为 您正在寻找无缓存指令:
如果您正在使用母版页设计,这可能会有点麻烦,但是我相信您可以将此指令放在单个页面上,而不会影响网站的其余部分(假设这就是您想要的)。 如果设置了此指令,浏览器将忠实地返回服务器以寻找页面的全新副本,这将使您的服务器看到用户未通过身份验证并将其撞到登录页面。 为了完整性:
|