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


    源参考: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都是可以伪造的。

  • 相关阅读:
    phpmyadmin详细的图文使用教程
    从入门到深入FIDDLER 2
    TestNG学习-001-基础理论知识
    TestNG学习-002-annotaton 注解概述及其执行顺序
    自动化测试如何解决验证码的问题
    自动化测试 -- 通过Cookie跳过登录验证码
    JMeter学习-012-JMeter 配置元件之-HTTP Cookie管理器-实现 Cookie 登录
    自动化测试框架
    并发和并行概念及原理
    匿名内部实现多线程的两种方式创建
  • 原文地址:https://www.cnblogs.com/xiatianoo/p/5888675.html
Copyright © 2020-2023  润新知