ASP.NET MVC过滤器中权限过滤器ValidateAntiForgeryToken的用法(Post-Only)
2014-11-16 20:43
573 查看
用途:防止CSRF(跨网站请求伪造)。
用法:在View->Form表单中:<%:Html.AntiForgeryToken()%>
在Controller->Action动作上:[ValidateAntiForgeryToken]
原理:
1、<%:Html.AntiForgeryToken()%>这个方法会生成一个隐藏域:<inputname="__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都是可以伪造的。
原文:http://www.cyqdata.com/cnblogs/article-detail-41400
用法:在View->Form表单中:<%:Html.AntiForgeryToken()%>
在Controller->Action动作上:[ValidateAntiForgeryToken]
原理:
1、<%:Html.AntiForgeryToken()%>这个方法会生成一个隐藏域:<inputname="__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都是可以伪造的。
原文:http://www.cyqdata.com/cnblogs/article-detail-41400
相关文章推荐
- ASP.NET MVC过滤器中权限过滤器ValidateAntiForgeryToken的用法(Post-Only)
- 自写过滤器替代ValidateAntiForgeryToken解决asp.net mvc关于提供的防伪标记适用于其他基于声明的用户,而不适用于当前用户的错误
- asp.net mvc ChildActionOnly 和ActionName的用法
- Asp.net MVC 权限过滤器实现方法的最佳实践
- asp.net mvc 全局权限过滤器及继成权限方法
- ASP.NET MVC使用过滤器进行权限控制
- asp.net mvc 全局权限过滤器及继成权限方法
- asp.net mvc ChildActionOnly 和ActionName的用法
- 初识ASP.NET MVC窗体验证与权限过滤---3.自定义过滤器验证Session超时
- asp.net mvc ChildActionOnly 和ActionName的用法
- ASP.NET Mvc Preview 5 演示Demo #2 实现Membership角色权限控制
- 在ASP.NET MVC中实现基于URL的权限控制
- 【翻译】ASP.NET MVC中实现一个错误处理过滤器[Implementing an Error-Handling Filter]
- ASP.NET MVC笔记 之 Action 过滤器
- ASP.NET MVC 重点教程一周年版 第六回 过滤器Filter
- ASP.NET中Session的用法之一:使用Session设定权限
- ASP.NET MVC 重点教程一周年版 第六回 过滤器Filter
- 在ASP.NET MVC中实现基于URL的权限控制
- Asp.net 中 Get和Post 的用法
- [翻译] 使用ASP.NET MVC操作过滤器记录日志