关于asp.net:一旦有人注销但单击“返回”按钮,是否有一种方法可以阻止页面渲染?

关于asp.net:一旦有人注销但单击“返回”按钮,是否有一种方法可以阻止页面渲染?

Is there a way to keep a page from rendering once a person has logged out but hit the “back” button?

我有一些网站需要登录并显示敏感信息。

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

该人退出站点,然后重定向回登录页面。

然后,此人可以单击"后退"并直接返回到包含敏感信息的页面。由于浏览器只是将其视为呈现的HTML,因此可以毫无问题地显示给他们。

当有人从注销的屏幕上单击"后退"按钮时,是否有办法防止显示该信息?我并不是要禁用后退按钮本身,而是只是为了防止再次显示敏感信息,因为该人不再登录该网站。

出于争论的考虑,上述站点/场景位于具有表单身份验证的ASP.NET中(因此,当用户转到第一页(即他们想要的页面)时,他们将被重定向到登录页面-如果发生这种情况,差异)。


简短的答案是它不能安全地完成。

但是,可以采用许多技巧来使用户难以回击并显示敏感数据。

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

这将禁用客户端的缓存,但是并非所有浏览器都支持。

如果可以选择使用AJAX,则可以使用从客户端代码更新的updatepanel检索敏感数据,因此,除非客户端仍然登录,否则在回击时将不会显示敏感数据。


缓存和历史记录是独立的,不应互相影响。

银行唯一的例外是,在历史记录中导航时,HTTPS和Cache-Control: must-revalidate的组合会强制刷新。

在纯HTTP中,除了利用浏览器错误外,没有其他方法可以做到这一点。

您可以使用Java技术来检查它,并检查document.cookie并在设置"杀手" cookie时重定向,但是我认为当浏览器未完全按照预期设置/清除cookie时,这可能会严重出错。


从aspdev.org:

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

1
Response.Cache.SetCacheability(HttpCacheability.NoCache)

设置此属性可确保如果用户单击后退按钮,则内容将消失,并且如果用户单击"刷新",则将其重定向到登录页面。


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返回,然后在大多数情况下,浏览器会向您显示消息,询问您是否要重新提交数据。 (不幸的是,我找不到这种行为的规范来源。)


我只是想起银行业的例子。

我银行的页面上有这个:

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

我想应该是关于这个的。


这有点麻烦,但是如果您有一个嵌入式的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中我会执行以下操作:

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

这将迫使浏览器重新检查该项目,因此应触发身份验证检查,从而拒绝用户访问。


使注销操作为POST。然后浏览器将提示您"您确定要重新发布该表单吗?"而不是显示页面。


您正在寻找无缓存指令:

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

如果您正在使用母版页设计,这可能会有点麻烦,但是我相信您可以将此指令放在单个页面上,而不会影响网站的其余部分(假设这就是您想要的)。

如果设置了此指令,浏览器将忠实地返回服务器以寻找页面的全新副本,这将使您的服务器看到用户未通过身份验证并将其撞到登录页面。


为了完整性:

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


推荐阅读

    linux入侵网站命令?

    linux入侵网站命令?,工作,地址,信息,系统,数字,网站,名称,命令,网络,密码,lin

    linux显示错误命令?

    linux显示错误命令?,信息,系统,电脑,状态,时间,环境,命令,搜狐,密码,异常,虚

    linux逐行显示命令?

    linux逐行显示命令?,标准,信息,系统,工作,地址,命令,实时,名称,文件,目录,Lin

    linux显示时间命令?

    linux显示时间命令?,时间,系统,管理,标准,信息,单位,工具,数据,中国,命令,lin

    linux启动显示命令行?

    linux启动显示命令行?,系统,密码,终端,状态,首页,情况,基础,电脑,信息,工具,l

    linux启动显示命令行?

    linux启动显示命令行?,系统,密码,终端,状态,首页,情况,基础,电脑,信息,工具,l

    linux显示之前的命令?

    linux显示之前的命令?,系统,信息,命令,地址,服务,环境,数据,标准,数字,不了,l

    linux打开显示器命令?

    linux打开显示器命令?,信息,工具,系统,环境,发行,实时,数据,设备,命令,文件,L

    linux命令实时显示?

    linux命令实时显示?,系统,实时,时间,信息,情况,命令,对比,电脑,名称,一致,lin

    linux外部命令显示?

    linux外部命令显示?,系统,工具,命令,一致,盘中,软件,技术,外部,内部,文件夹,L

    linux命令显示ip?

    linux命令显示ip?,地址,系统,网络,信息,技术,电脑,手机,设备,服务,管理,配置L

    linux编译时显示命令?

    linux编译时显示命令?,系统,基础,工具,代码,百度,下来,网上,命令,内核,文件,L

    linux网站根目录命令?

    linux网站根目录命令?,系统,一致,设备,网站,目录,根目录,信息,标准,位置,电

    linux显示运行命令?

    linux显示运行命令?,系统,服务,状态,信息,工具,数据,电脑,标准,管理,时间,如

    显示linux网卡命令行?

    显示linux网卡命令行?,系统,信息,工具,网络,服务,电脑,网卡,技术指标,地址,

    linux命令显示内容?

    linux命令显示内容?,标准,系统,数据,命令,百度,实时,时间,信息,文件,内容,lin

    linux常用显示命令?

    linux常用显示命令?,工作,地址,系统,信息,管理,命令,目录,标准,功能,常用命

    linux用命令显示账号?

    linux用命令显示账号?,密码,系统,信息,地址,电脑,名字,用户,命令,用户名,用

    linux命令行同步显示?

    linux命令行同步显示?,地址,工具,系统,数据,工作,时间,命令,综合,网址,信息,L

    linux命令显示窗口?

    linux命令显示窗口?,系统,工具,首页,终端,密码,命令,窗口,界面,桌面,选项,lin