防止XSRF 解决方案

1.首先在表单提交页面生成校验使用的Token

   public ActionResult Index()
        {
            //Token验证需要使用的token
            string token = System.Guid.NewGuid().ToString();
            this.HttpContext.Session["Token"] = token;
            ViewBag.token = token;
            return View();
        }    

2.视图页面在表单作用域下建立隐藏域

 <input type="hidden" name="hiddenToken" id="hiddenToken" value="@ViewBag.token" />

3.建立验证Token逻辑的特性标签

  public class PlatformActionFilter : FilterAttribute, IActionFilter
    {
        public PlatformActionFilter()
        {

        }
        public void OnActionExecuting(ActionExecutingContext filterContext)
        {
            string httpMethod = filterContext.RequestContext.HttpContext.Server.HtmlEncode(filterContext.RequestContext.HttpContext.Request.HttpMethod);

            if (httpMethod == "POST")
            {
                // page token
                // hiddenToken
                string cacheToken = filterContext.HttpContext.Request["hiddenToken"];
                var session = System.Web.HttpContext.Current.Session["Token"];
                //filterContext.HttpContext.Request.IsAjaxRequest()
                if (session != null)
                {
                    if (cacheToken == session.ToString())
                    {
                        System.Web.HttpContext.Current.Session["Token"] = "Success";
                        Logger.LogHelper.WriteErrorLog("提交成功!");
                    }
                    else
                    {
                        System.Web.HttpContext.Current.Session["Token"] = "Erro";
                        Logger.LogHelper.WriteErrorLog("请不要重复提交!");
                    }
                }
            }
        }
        public void OnActionExecuted(ActionExecutedContext filterContext)
        {

        }
    }

4.提交控制器做验证判断token值是否为Success

  [HttpPost]
        [PlatformActionFilter]
        public ActionResult Register(Users Usdata)
        {
            if (this.HttpContext.Session["Token"].ToString() == "Success")
            {
                return WriteError("erro");
            }
            //这里写正常的业务逻辑和返回
              return WriteSuccess("注册成功!");
        }    

整个流程的验证思路就是在session中存放一个特殊标志。当表单页面被请求时,生成一个特殊的字符标志串,存在session中,同时放在表单的隐藏域里。接受处理表单数据时,通过过滤器的标签验证session是否合法,然后正常处理数据。除非走正常逻辑先进入到表单提交页面,然后才能正常处理Post请求。

时间: 2024-10-07 07:16:29

防止XSRF 解决方案的相关文章

asp.net MVC 常见安全问题及解决方案

asp.net MVC 常见安全问题及解决方案 一.CSRF (Cross-site request forgery跨站请求伪造,也被称为"one click attack"或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用) 详细说明: http://imroot.diandian.com/post/2010-11-21/40031442584 Example :            在登陆状态下进入了攻击网站向安全站点发送了请求. Solut

前端如何去做跨域解决方案

前言 那些你,你常用的跨域解决方案除了jsonp 之外,还有其他的吗?今日早读文章可以告诉你,本文由 金蝶 @scq000授权分享. 正文从这开始~ 浏览器在请求不同域的资源时,会因为同源策略的影响请求不成功,这就是通常被提到的"跨域问题".作为前端开发,解决跨域问题应该是一个被熟练掌握的技能.而随着技术不断的更迭,针对跨域问题的解决也衍生出了多种解决方案.我们通常会根据项目的不同需要,而采取不同的方式.这篇文章,将详细总结跨域问题的相关知识点,以便在遇到相同问题的时候,能有一个清晰的

理解跨域及常用解决方案

跨域,相信大家无论是在工作中还是在面试中经常遇到这个问题,常常在网上看到别人所整理的一些方法,看似知道是怎么回事,但如果没有动手实践过,总觉得自己没有真正的掌握,在这里,通过自己认真思考整理一些常用的方法. 跨域的产生 不用多讲,作为一名前端开发人员,相信大家都知道跨域是因为浏览器的同源策略所导致的.所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源.浏览器引入同源策略主要是为了防止XSS,CSRF攻击. CSRF(Cross-site reque

程序员常用的3大Web安全漏洞防御解决方案:XSS、CSRF及SQL注入(图文详解)

https://blog.csdn.net/ChenRui_yz/article/details/86489067 随着互联网的普及,网络安全变得越来越重要,程序员需要掌握最基本的web安全防范,下面列举一些常见的安全漏洞和对应的防御措施.01 常见的Web安全问题 1.前端安全 XSS 漏洞 CSRF 漏洞 2.后端安全 SQL 注入漏洞 程序员学架构mikechen优知02 XSS漏洞 1.XSS简介 跨站脚本(cross site script)简称为XSS,是一种经常出现在web应用中的

window.open被浏览器拦截的解决方案

现象 最近在做项目的时候碰到了使用window.open被浏览器拦截的情况,搞得人无比郁闷啊,虽然在自己的环境可以对页面进行放行,但是对用户来说,不能要求用户都来通过拦截.何况当出现拦截时,很多小白根本不知道发生了啥,不知道在哪里看被拦截的页面,简直悲催啊~~. 另外,可以发现,当window.open为用户触发事件内部或者加载时,不会被拦截,一旦将弹出代码移动到ajax或者一段异步代码内部,马上就出现被拦截的表现了. 原因分析&深入研究 当浏览器检测到非用户操作产生的新弹出窗口,则会对其进行阻

关于Eclipse报:&quot; cannot be read or is not a valid ZIP file&quot;的解决方案

原因 使用Eclipse+maven构建项目build完之后,会在项目顶上显示一个叹号. 打开problem显示 原因为对应的jar包损坏. 如图: 解决方案 使用别的版本的jar包 自己上网找到没问题的jar包进行替换 补充 关于有人说可以在.classpath文件中删除这个对应的依赖来解决问题实质是治标不治本.不建议采用.

Windows10 使用Virtual Box一启动虚拟机就蓝屏(错误代码SYSTEM_SERVICE_EXCEPTION)解决方案

原文:Windows10 使用Virtual Box一启动虚拟机就蓝屏(错误代码SYSTEM_SERVICE_EXCEPTION)解决方案 一打开虚拟机电脑就立马蓝屏重启,新建虚拟机也没用,然后就开始百度,百度上全说什么驱动不对,然后我就卸载升级各种驱动,然后各种重装VirtualBox,还是不行,搞了一两个小时,都快放弃了.决定上个google,终于看到一篇文章说是因为Hyper-V与Virtual Box冲突了,只需要在控制面板关闭就行.然后抱着试一试的心态. 首先我们先打开控制面板.按Wi

Asp.Net MVC及Web API框架配置会碰到的几个问题及解决方案 (精髓)

前言 刚开始创建MVC与Web API的混合项目时,碰到好多问题,今天拿出来跟大家一起分享下.有朋友私信我问项目的分层及文件夹结构在我的第一篇博客中没说清楚,那么接下来我就准备从这些文件怎么分文件夹说起.问题大概有以下几点: 1.项目层的文件夹结构 2.解决MVC的Controller和Web API的Controller类名不能相同的问题 3.给MVC不同命名空间的Area的注册不同的路由 4.让Web API路由配置也支持命名空间参数 5.MVC及Web API添加身份验证及错误处理的过滤器

ZYNQ 7000平台UDP数据包(1字节或2字节)校验和Checksum错误0xFFFF解决方案(linux+vxworks6.9平台)

在赛灵思ZYNQ 7000平台,使用UDP方式发送1字节或者2字节数据时,校验和为错误值0xffff,接收机无法正常接收ZYNQ7000平台发送的数据,本人已经找到该问题的解决方案,有该问题的朋友可以通过邮箱[email protected]与我联系,联系时请详细描述你的环境,针对该咨询提供的问题解决方案会收取一定的费用,费用不会太高,现在是知识付费的年代,希望各位理解,同时如果能够解决您的问题,也是为你节约了开支.我会及时回复邮件的.具体事项可以邮件沟通[email protected].