zoukankan      html  css  js  c++  java
  • ASP.NET MVC过滤器中权限过滤器ValidateAntiForgeryToken的用法(Post-Only)

    用途:防止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 

  • 相关阅读:
    Binary Tree Inorder Traversal
    Populating Next Right Pointers in Each Node
    Minimum Depth of Binary Tree
    Majority Element
    Excel Sheet Column Number
    Reverse Bits
    Happy Number
    House Robber
    Remove Linked List Elements
    Contains Duplicate
  • 原文地址:https://www.cnblogs.com/nzcblog/p/4101871.html
Copyright © 2011-2022 走看看