`

防止登录之后,利用浏览器的后退功能,返回登录前的页面,在次登录报错

阅读更多

       这个原因要从MVC 中的Html.AntiForgeryToken()说起了,呵呵。

       MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(CSRF:Cross-site request forgery)攻击的一个措施,它跟XSS(xss又叫css:Cross-Site-Script),攻击不同,xss一般是利用站内信任的用户在网站内插入恶意的脚本代码进行攻击,而csrf则是伪造成信任用户对网站进行攻击。

      每一次登录的时候都会获取到一个验证码即:key,如: @Html.AntiForgeryToken(),在后台添加一个验证标签 如:

 [HttpPost]
 [ValidateAntiForgeryToken]//验证标签
        public ActionResult Login(LoginModel model)
        {           
        }

      登录完成之后,在利用浏览器的后退功能,返回到登录前的页面,这是利用浏览器的缓存。它获取到的那个key是没有被刷新的,还是原来的,这样再次登录,就会报错了。这种的解决方法应该有多种吧。

      我是写了一个标签,去清除缓存,当后退到登录页面时,是在去刷新页面。这样不是缓存,而是再次刷新页面,重新获取这个key。

     代码如下 清除缓存:

public class DisableCacheAttribute : ActionFilterAttribute
    {
        public override void OnResultExecuting(ResultExecutingContext filterContext)
        {
            var cache = filterContext.HttpContext.Response.Cache;
            cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
            cache.SetNoStore();
            cache.SetExpires(DateTime.UtcNow.AddDays(-1));
            cache.SetValidUntilExpires(false);
            cache.SetCacheability(HttpCacheability.NoCache);

        }

 在control加上这个标签:

 [DisableCache]//清除缓存标签
        public ActionResult Login(string ReturnUrl,string type)
        {
            ViewBag.ReturnUrl = ReturnUrl;
            ViewBag.logintype = type;
            return View();
        }

 (二)防止退出登录后 利用浏览器后退功能 回到登出前的页面

完全是处于对信息安全的考虑,因为一般都会设置session来控制用户对一些页面的非法访问。但是session防止不了浏览器的后退。也就是说你退出登录后,如果不关闭页面,还是有可能泄露信息的。下面两种方式,当然并不止两种,而且肯定有更好的方式。

(1)关闭旧页,打开新页:

function co(){
    window.open("");
    window.opener = null;
    window.close();
}

 (2)页面自动刷新一次,这样即使后退,也是看到刷新后,经过session验证的页面

(a)通过url刷新:

function refresh(){
    url = location.href; //把当前页面的地址赋给变量 url
    //分切变量 url 分隔符号为 "#"
    if( url.indexOf("#") == -1){ //如果url后没有#
        url += "#"; //加入 #
        self.location.replace(url); //刷新页面
    }
}

 (b)通过cookie刷新

//自动刷新一次,如果没登录过,新建一个cookie:views 置为1,根据views是否有值判断是否是第一次浏览,如果是第一次就刷新。
function autoRefresh() {
    if (getCookie("views") != 1) {
        document.cookie = "views = 1";
        if (getCookie("view") != 1)
            location.reload()
        else
            refresh();//如果浏览器不允许写cookie 则用url刷新方法,确保万无一失。
    } else{
        delCookie("views");
    }
        
}
function getCookie(name) {
    //获取指定名称的cookie的值
    var arrStr = document.cookie.split("; ");
    for ( var i = 0; i < arrStr.length; i++) {
        var temp = arrStr[i].split("=");
        if (temp[0] == name)
            return unescape(temp[1]);
    }
    return null;
}
 function delCookie(name){
     //为了删除指定名称的cookie,可以将其过期时间设定为一个过去的时间 
     var date = new Date();
     date.setTime(date.getTime() - 10000);
     document.cookie = name + "=a; expires=" + date.toGMTString();
 }

 

 

 

分享到:
评论

相关推荐

    当用户退出点击浏览器后退仍可回到原来页面的解决方案

    解决方案1:禁用缓存,前一次使用的方法,在电脑上各浏览器都没问题,但在ipad、安卓手机上仍有问题 解决方案2:禁用浏览器后退键 [removed] window.history.forward(1); 结果和方案一一样的结果,pad上没效果 ...

    在vue中阻止浏览器后退的实例

    在某些情况下,我们可以在路由守卫中判断用户是否试图导航到未授权的路由,并相应地处理导航,从而间接地阻止用户通过后退按钮返回到特定页面。 最后,值得注意的是,原文中提到的“本文部分内容通过ocr扫描出文档...

    vue实现微信浏览器左上角返回按钮拦截功能

    主要介绍了vue实现微信浏览器左上角返回按钮拦截功能,本文通过实例代码相结合的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

    全面考察“禁用浏览器后退按钮”

    浏览器的后退按钮是用户导航历史记录的重要工具,然而在某些特定场景下,开发者可能希望禁用或限制其功能,以防止用户意外打乱预定的页面流程,比如在线表单的提交过程。本文探讨了多种禁用或管理浏览器后退按钮的...

    浏览器报错HTML.rar

    浏览器报错HTML,静态界面html,通用个系统浏览器筛选。包含各流向浏览器........... 浏览器报错HTML,静态界面html,通用个系统浏览器筛选。包含各流向浏览器...........

    javascript实现禁用浏览器后退按钮

    例如,在某些登录验证后的页面,为了防止用户通过后退按钮回到登录前的状态,从而绕过登录验证;或者在某些表单填写完成后,为了避免用户不小心按到后退键导致数据丢失等场景。本文将详细介绍几种使用JavaScript来...

    localStorage在安卓内内置浏览器中报错解决

    localStorage在安卓内内置浏览器中报错解决,最好的解决的方法

    ASP.NET屏蔽浏览器后退

    在ASP.NET开发中,有时我们需要控制用户的行为,例如防止他们使用浏览器的“后退”按钮回到之前的状态。这种需求可能出于各种原因,如保持数据一致性、保护敏感信息或避免重复提交。标题“ASP.NET屏蔽浏览器后退”所...

    屏蔽浏览器的后退按钮

    在网页开发过程中,有时会遇到用户需求或特定应用场景,需要阻止浏览器的后退按钮功能。这篇文章旨在探讨如何实现这一功能,并解释为什么这种做法可能不是最佳选择。 #### 为什么要屏蔽后退按钮? 通常情况下,...

    解决微信授权成功后点击按返回键出现空白页和报错的问题

    微信授权我是 在index.vue做的授权,是一个空白页,因为授权需要回调所以这个页面会刷新两次,当我们授权成功进入主页面后,点击返回键或者点击手机的物理返回键,因为浏览器history机制,按物理返回或者返回肯定是...

    关于ajax支持浏览器后退前进的做法

    然而,传统的浏览器后退和前进按钮在AJAX应用中可能会导致用户体验下降,因为它们可能无法正确反映页面状态的变化。本文将详细介绍如何使用JavaScript来实现AJAX支持的浏览器后退和前进功能,以提供更流畅的导航体验...

    关于iframe页面报错如何跳到框架显示

    // 清除服务器错误,防止页面返回错误状态码 Server.ClearError(); // 设置要跳转的URL string url = "http://example.com/error.html"; // 替换为实际的错误页面URL // 构建JavaScript代码,使顶层窗口...

    栈:如何实现浏览器的前进和后退功能?.pdf

    ### 栈:如何实现浏览器的前进和后退功能...通过上述分析可以看出,栈作为一种简单而高效的数据结构,不仅在理论上有很好的性能表现,而且在实际应用中也非常有用,特别是在实现浏览器的前进后退功能上发挥了重要作用。

    通用浏览器多开CK登录器

    同时,由于CK包含敏感信息,工具的安全性也至关重要,因此"通用浏览器多开CK登录器"应具备加密存储和防止泄露的机制。 其中,“配置.ini”文件是程序的配置信息,通常包含了登录器的设置参数,如默认浏览器路径、CK...

    解决手机浏览器点击后退页面刷新问题,兼容苹果 safari浏览器和安卓浏览器

    解决手机浏览器点击后退页面刷新问题,兼容苹果 safari浏览器和安卓浏览器。 js的window.onbeforeunload,onunload,window.addEventListener(‘pagehide‘, () => {}手机浏览器不生效

    js禁止浏览器页面后退功能的实例(推荐)

    在JavaScript编程中,有时我们需要禁用浏览器的默认后退功能,比如在用户完成登录、支付等操作后,防止用户意外点击后退按钮导致数据丢失或出现错误状态。本篇文章将详细解析如何通过JavaScript实现这一功能。 首先...

    退出登录后点击后退问题解决方案

    2. **使用JavaScript阻止后退**:接下来,在前端页面中加入一段JavaScript代码,用于在用户退出登录时执行特定操作,防止用户通过后退按钮回到之前的页面。 下面是一段示例代码,展示了如何使用JavaScript来实现这...

    如何禁止浏览器使用后退按钮功能

    在互联网应用中,浏览器的后退按钮是用户在浏览网页时常用的一个功能,它允许用户从当前页面返回到之前浏览过的页面。通常这个功能对于浏览体验来说是非常便捷和有用的。但在某些特定场景下,比如在线填报表格或进行...

    7.3 浏览器前进后退刷新

    7.3 浏览器前进后退刷新

Global site tag (gtag.js) - Google Analytics