用途:防止CSRF(跨网站请求伪造)。

用法:在View->Form表单中:<%:Html.AntiForgeryToken()%>

在Controller->Action动作上:[ValidateAntiForgeryToken]

原理:

1、<%:Html.AntiForgeryToken()%>这个方法会生成一个隐藏域:<input name="__RequestVerificationToken" type="hidden" value="7FTM...sdLr1" />并且会将一个以"__RequestVerificationToken“为KEY的COOKIE给控制层。

2、[ValidateAntiForgeryToken],根据传过来的令牌进行对比,如果相同,则允许访问,如果不同则拒绝访问。

关键:ValidateAntiForgeryToken只针对POST请求。

换句话说,[ValidateAntiForgeryToken]必须和[HttpPost]同时加在一个ACTION上才可以正常使用。

这其中的原理我也没想明白,等下次好好把MVC的源代码看看。

不过我这么说是有根据的,我写了一些案例做了测试。

案例:

1、在一个ACTION的GET和POST方式分别加了[ValidateAntiForgeryToken]特性

Action:

2、用一个测试页面以POST方式去请求ACTION,结果是成功的。并且,隐藏域的值和COOKIE都是可以拿到的。

测试Post的页面:

3、用一个测试页面以GET方式去请求ACTION,报错。

测试Get的页面:

推荐使用方式:

1、Post-Only:大概思想是,拒绝所有的GET,只允许自己的POST。(安全,但不灵活)

2、GET只做显示,对所有的GET开放;POST做修改,对外界关闭,对自己开放。(灵活,但不够安全)

国外有个人说,其实这个过滤器本身就不安全,他如是说,所有的REQUEST都是可以伪造的。

说一说MVC的CSRF(三)的更多相关文章

  1. ASP.NET MVC防范CSRF最佳实践

    XSS与CSRF 哈哈,有点标题党,但我保证这篇文章跟别的不太一样. 我认为,网站安全的基础有三块: 防范中间人攻击 防范XSS 防范CSRF 注意,我讲的是基础,如果更高级点的话可以考虑防范机器人刷 ...

  2. ASP.NET MVC Model验证(三)

    ASP.NET MVC Model验证(三) 前言 上篇中说到在MVC框架中默认的Model验证是在哪里验证的,还讲到DefaultModelBinder类型的内部执行的示意图,让大家可以看到默认的M ...

  3. ASP.NET MVC Model绑定(三)

    ASP.NET MVC Model绑定(三) 前言 看过前两篇的朋友想必对Model绑定有个大概的了解,然而MVC框架给我们提供了更高的可扩展性的提供程序编程模式,也就是本篇的主题了,会讲解一下Mod ...

  4. ASP.NET MVC Model元数据(三)

    ASP.NET MVC Model元数据(三) 前言 在上篇中我们大概的讲解了Model元数据的生成过程,并没有对Model元数据本身和详细的生成过程有所描述,本篇将会对详细的生成过程进行讲解,并且会 ...

  5. MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则)

    前言:上篇介绍了下自己的MVC框架前两个版本,经过两天的整理,版本三基本已经完成,今天还是发出来供大家参考和学习.虽然微软的Routing功能已经非常强大,完全没有必要再“重复造轮子”了,但博主还是觉 ...

  6. ASP.NET MVC 控制器激活(三)

    ASP.NET MVC 控制器激活(三) 前言 在上个篇幅中说到从控制器工厂的GetControllerInstance()方法来执行控制器的注入,本篇要讲是在GetControllerInstanc ...

  7. 2017.3.31 spring mvc教程(三)拦截器

    学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...

  8. asp.netcore mvc 防CSRF攻击,原理介绍+代码演示+详细讲解

    一.CSRF介绍 1.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session ridin ...

  9. ASP.NET MVC 防止 CSRF 的方法

    MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(CSRF:Cross-site request forgery)攻击的一个措施,它跟XSS(XSS又叫CSS:Cross ...

随机推荐

  1. pyspark如何遍历broadcast

    因为论文关系要用到pyspark,具体情形如下: 有一个list=['aaa','bbb','ccc','ddd'],然后有一个rdd内数据类型是str,eg:'abcdefg',正常如果是需要筛选数 ...

  2. Spark调优 数据倾斜

    1. Spark数据倾斜问题 Spark中的数据倾斜问题主要指shuffle过程中出现的数据倾斜问题,是由于不同的key对应的数据量不同导致的不同task所处理的数据量不同的问题. 例如,reduce ...

  3. 恢复数据库的redo日志文件(由于异常关机引起)

    需要事先进入sqlplus select * from v$log 打印相关文件信息 1.recover database until cancel(recover database using ba ...

  4. datatable 笔记 服务器端查询

    var vTable = ""; $("#vip_data").dataTable({ "scrollY": 400, //竖向高度 滚动 ...

  5. .Net异步关键字async/await的最终理解

    由于之前的项目中自己突然想试试异步action,于是使用了一下,突然就对异步action的执行流程以及原理及其好处产生了兴趣,再参考了一些文章之后,就做了下归类. 我们可以不需要太深入的理解底层,但是 ...

  6. iOS异常捕获和处理

    2013年4月份整理的代码,仅作记录:   //先宏定义 //发布和未发布状态的日志切换 #ifdef DEBUG     //异常栈开关     #define STACK_KEY YES     ...

  7. php一些高级函数方法

    PHP高级函数 1.call_user_func (http://php.net/manual/zh/function.call-user-func.php) 2.get_class (http:// ...

  8. 等高布局display:table

    display:table用法: 父元素:display:table; 子元素:display:table-cell; 注:使用display:table-cell元素部分出现空白缝隙的问题:设置 . ...

  9. SpringBoot报错:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone

    解决方法: 在数据库连接url配置后边加&serverTimezone=GMT%2B8 例: jdbc:mysql://127.0.0.1:3306/test改为jdbc:mysql://12 ...

  10. 201771010126 王燕《面向对象程序设计(java)》第十一周学习总结

    实验十一   集合 实验时间 2018-11-8 1.实验目的与要求 (1) 掌握Vetor.Stack.Hashtable三个类的用途及常用API: Vector类实现了长度可变的数组. Vecto ...