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}}。

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

 
 

revel框架教程之CSRF(跨站请求伪造)保护的更多相关文章

  1. 第三百一十五节,Django框架,CSRF跨站请求伪造

    第三百一十五节,Django框架,CSRF跨站请求伪造  全局CSRF 如果要启用防止CSRF跨站请求伪造,就需要在中间件开启CSRF #中间件 MIDDLEWARE = [ 'django.midd ...

  2. Django框架 之 基于Ajax中csrf跨站请求伪造

    Django框架 之 基于Ajax中csrf跨站请求伪造 ajax中csrf跨站请求伪造 方式一 1 2 3 $.ajaxSetup({     data: {csrfmiddlewaretoken: ...

  3. Web框架之Django_09 重要组件(Django中间件、csrf跨站请求伪造)

    摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于 ...

  4. Web框架之Django重要组件(Django中间件、csrf跨站请求伪造)

    Web框架之Django_09 重要组件(Django中间件.csrf跨站请求伪造)   摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是 ...

  5. Django框架(十二)-- 中间件、CSRF跨站请求伪造

    中间件 一.什么是中间件 请求的时候需要先经过中间件才能到达django后端(urls,views,templates,models) 响应的时候也需要经过中间件才能到达web服务网关接口 djang ...

  6. 十三 Django框架,CSRF跨站请求伪造

     全局CSRF 如果要启用防止CSRF跨站请求伪造,就需要在中间件开启CSRF #中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMidd ...

  7. Django框架(十六)-- 中间件、CSRF跨站请求伪造

    一.什么是中间件 中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出 二.中间件的作用 如果你想修改请求,例如被传送到view ...

  8. Django框架(十七)—— 中间件、CSRF跨站请求伪造

    目录 中间件 一.什么是中间件 二.中间件的作用 三.中间件执行顺序 四.自定义中间件 1.导包 2.定义类,继承MiddlewareMixin 3.在视图函数中定义一个函数 4.在settings的 ...

  9. 教你轻松解决CSRF跨站请求伪造攻击

    摘要:CSRF(Cross-site request forgery)跨站请求伪造,通过伪装来自受信任用户的请求来利用受信任的网站.与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也 ...

随机推荐

  1. crawler_URL编码原理详解

    经常写爬虫的童鞋,难免要处理含有中文的url,大部分时间,都知道url_encode,各个语言也都有支持,今天简单整理下原理,供大家科普 1.特征: 如果URL中含有非ASCII字符的话, 浏览器会对 ...

  2. oracle_oracle中修改日期的显示格式

    我的现在的日期格式是          ,要改成英文的需要输入一下命令: ALTER SESSION SET NLS_DATE_LANGUAGE=AMERICAN; 修改后变为: 同样也得若是英文要想 ...

  3. 从头开始学JavaScript (四)——操作符

    原文:从头开始学JavaScript (四)--操作符 一.一元操作符 1.自增自减操作符:分为前置型和后置型: 前置型:++a;--a; 后置型:a++;a--; 例: <script typ ...

  4. cocos2dx 3.0正式版 于mac在新建项目

    下载cocos2dx 3.0正式版,和安装python2.7.*版本号. 加入cocos命令: mac下: 在cocos2d-x\tools\cocos2d-console\bin文件夹下.执行ins ...

  5. js 正则练习之语法高亮

    原文:js 正则练习之语法高亮 学了几天正则,差不多该总结整理写成果了,之前就想写语法高亮匹配来着,不过水平不够,看着例子都不理解.今天就分析下 次碳酸钴 和 Barret Lee 语法高亮实现. 先 ...

  6. wamp 已安装cakephp Fatal error: You must enable the intl extension to use CakePHP. in XXX

    今wamp已安装cakephp3.x什么时候.报告这样的错误:Fatal error: You must enable the intl extension to use CakePHP. in D: ...

  7. mysql 使用记号

    1. 避免重复入库的插入记录方法 向一个数据库中插入且在未存在的情况下插入一行记录.若有主键可以区分则可以使用 replace into 方法, 单偏偏很多时候数据库设计者会设计自增主键,replac ...

  8. MVC 5 Scaffolding多层架构代码生成向导开源项目

    asp.net MVC 5 Scaffolding多层架构代码生成向导开源项目(邀请你的参与)   Visual Studio.net 2013 asp.net MVC 5 Scaffolding代码 ...

  9. 在windows下用C语言写socket通讯实例

    原文:在windows下用C语言写socket通讯实例 From:Microsoft Dev Center #undef UNICODE #define WIN32_LEAN_AND_MEAN #in ...

  10. 一个大浪Java罢工(一个)安装JDK和环境变量配置

    一个.基础知识 (一)什么是Java? Java是一种能够撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台( ...