• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NETMVC过滤器中权限过滤器ValidateAntiForgeryToken的用法(Post-Only) ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

源参考:https://i.cnblogs.com/EditPosts.aspx?opt=1

用途:防止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都是可以伪造的。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap