问题描述
我看了一下,很多人判断SESSION过期返回登录界面是用的if(Session["User"]==null){Response.Redirect("Login.aspx");}
但是这么写会引发CrossSiteHistoryManipulation安全问题。怎么修改才不会引发这个安全问题呢、??求解决啊。。。。
解决方案
解决方案二:
说白了不就是不让用后退么。。。整这么专业的名词,害得我谷歌了半天。好多招式,比如js禁用浏览器后退按钮,这个做法挺傻B的。。javascript:window.history.forward(1);
或者禁用缓存<metahttp-equiv="Expires"CONTENT="0"><metahttp-equiv="Cache-Control"CONTENT="no-cache"><metahttp-equiv="Pragma"CONTENT="no-cache">
或者用新页面替换历史记录javascript:location.replace(this.href)
这种东西没有太好的解决方案、、。。。最安全的办法就是客户端和服务端混合验证。例如数据提交的时候进行验证
解决方案三:
就算用了回退也只能看到他之前看到过的页面,至于在这个页面上再次进行一些操作后台也应该会有一些制御~~说白了就是看了也只能白看~~
解决方案四:
引用1楼hrabeyond的回复:
说白了不就是不让用后退么。。。整这么专业的名词,害得我谷歌了半天。好多招式,比如js禁用浏览器后退按钮,这个做法挺傻B的。。javascript:window.history.forward(1);或者禁用缓存<metahttp-equiv="Expires"CONTENT="0"><metahttp-equiv="Cache-Control"CONTENT="no-cache"><metahttp-equiv="Pragma"CONTENT="no-cache">
或者用新页面替换历史记录javascript:location.replace(this.href)
这种东西没有太好的解决方案、、。。。最安全的办法就是客户端和服务端混合验证。例如数据提交的时候进行验证
CrossSiteHistoryManipulation,好专业的名词
解决方案五:
引用3楼wpfLove的回复:
Quote: 引用1楼hrabeyond的回复:
说白了不就是不让用后退么。。。整这么专业的名词,害得我谷歌了半天。好多招式,比如js禁用浏览器后退按钮,这个做法挺傻B的。。javascript:window.history.forward(1);或者禁用缓存<metahttp-equiv="Expires"CONTENT="0"><metahttp-equiv="Cache-Control"CONTENT="no-cache"><metahttp-equiv="Pragma"CONTENT="no-cache">
或者用新页面替换历史记录javascript:location.replace(this.href)
这种东西没有太好的解决方案、、。。。最安全的办法就是客户端和服务端混合验证。例如数据提交的时候进行验证
CrossSiteHistoryManipulation,好专业的名词
这么专业的名词不是我弄的,,是人家软件测评公司给的。程序要做安全测试,好多安全漏洞要补上。
解决方案六:
Response.Cache.SetNoStore();
禁止页面缓存,给你的页面加这个就可以不能后退了
解决方案七:
我得做法就是存在退出功能的那个页面加Response.Cache.SetNoStore()就可以了然后ashx当判断到用户没登陆时,返回特定的Header比如Response.AddHeader("Auth_Error","{code:2001}");
前台拦截ajax请求;(function($){varajax=$.ajax;$.ajax=function(s){varold=s.error;varerrHeader=s.errorHeader||"Auth_Error";s.error=function(xhr,status,err){varerrMsg=window["eval"]("("+xhr.getResponseHeader(errHeader)+")");if(errMsg&&errMsg.code){switch(errMsg.code){case2001:top.window.location.reload();break;case2003:top.alert('很抱歉,你没有执行该操作的权限');break;}}if(old){old(xhr,status,errMsg||err);}}ajax(s);}})(jQuery);
这段js是我从网上找到的。。。然后做了点小修改,反正就是让最外层的页面刷新,通过后台的验证机制来确认是返回登录还是可以SOS
解决方案八:
楼主考虑得很周全,但本人感觉没有必要管这个.
解决方案九:
引用3楼wpfLove的回复:
CrossSiteHistoryManipulation,好专业的名词
老外放个屁,有时候也会被某些公司当作香水的。
解决方案十:
比如说有个人,把你的网页放到他自己的iframe内,然后它查看history.length。于是有人就杞人忧天了。那么csdn上有许多监视webbrowser的变化,岂不是比这个强多了?
解决方案十一:
引用7楼tcmakebest的回复:
楼主考虑得很周全,但本人感觉没有必要管这个.
我也不想管,可安全测评过不去啊。。