• revel框架教程之CSRF(跨站请求伪造)保护


    revel框架教程之CSRF(跨站请求伪造)保护

    CSRF是什么?请看这篇博文“浅谈CSRF攻击方式”,说的非常清楚。

    现在做网站敢不防CSRF的我猜只有两种情况,一是没什么人访问,二是局域网应用。山坡网之前属于第二种情况,哈哈,所以至今没什么问题。但昨天突然发现了有人开始扫url,估计用的是个工具,很整齐的扫了一大片知名框架和数据库管理工具的管理员登陆url。还好我们没有使用其中的任何一个,侥幸没事。但这也给我敲响了警钟,互联网上那是危机重重啊。

    于是第一步就开始加上CSRF保护,搞起来还是花费了些时间,暗叹这种事情还是刚开始就做最容易。

    好,动手。

    获取revel-csrf包。

    go get github.com/cbonello/revel-csrf

    它是用revel的filter机制实现的,所以在controller包的init函数中给revel的默认filter链加上csrf处理。

    revel.Filters = []revel.Filter{ 
      revel.PanicFilter,              
      revel.RouterFilter,             
      revel.FilterConfiguringFilter,  
      revel.ParamsFilter,             
      revel.SessionFilter,            
      revel.FlashFilter,              
      csrf.CSRFFilter,               // CSRF保护的filter 
      revel.ValidationFilter,         
      revel.I18nFilter,              
      revel.InterceptorFilter,        
      revel.ActionInvoker,           
    }

    现在试试看除了GET之外的Request,应该会出现“403 Forbidden”错误,提示“CSRF token mismatch.”。起效了!

    现在去修改view,在每一个POST的Form上添加一个csrf token。

    <form class="form loginForm" action="/account/login" method="POST"> 
      <input type="hidden" name="csrf_token" value="{{ .csrf_token }}" />

    </form>

    再试试看,应该可已正常工作了。如果对应Ajax调用的话也是同理,在Request Data里面加上一个名叫“csrf_token”的字段,值是 {{.csrf_token}}。

    改动不大,但涉及的地方很多,前前后后修改加测试还是花了一个小时。这事儿,一定要在刚开始的时候就考虑到,不然越到后期改起来越悲壮!

     
     
  • 相关阅读:
    (转) 解析 char *p和 char[]
    Linux下C程序内存、内存对齐问题 (实战)
    关于子网划分的两个例子
    子网掩码与子网划分 (转载)
    A、B、C类地址及子网掩码学习笔记
    本机ip、127.0.0.1和0.0.0.0区别(转载)
    初识const
    流媒体协议
    i2c-tools的使用方法
    linux ——内存共享映射mmap和munmap
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3310344.html
Copyright © 2020-2023  润新知