帮酷LOGO
  • 显示原文与译文双语对照的内容
文章标签:PRE  CSR    framework  Revel  CSRF  
CSRF prevention for Revel framework.

  • 源代码名称:revel-csrf
  • 源代码网址:http://www.github.com/cbonello/revel-csrf
  • revel-csrf源代码文档
  • revel-csrf源代码下载
  • Git URL:
    git://www.github.com/cbonello/revel-csrf.git
  • Git Clone代码到本地:
    git clone http://www.github.com/cbonello/revel-csrf
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/cbonello/revel-csrf
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • revel-csrf

    revel-csrf 实现跨站点请求伪造( CSRF ) 攻击防止 Revel框架。

    安装

    go get github.com/cbonello/revel-csrf

    示例目录中提供了演示应用程序。 要启动它:

    revel run github.com/cbonello/revel-csrf/samples/demo

    配置选项

    revel csrf支持 app.conf 中的以下配置选项:

    • csrf.ajax 一个布尔值,该值指示 revel-csrf 是否应支持for令牌的注入和验证。 默认值为 false

    • csrf.token.length 一个整数值,定义CSRF标记中应该找到的字符数。 令牌长度应在 [32..512] 中,默认值为 32个字符。

    操作指南

    只需调用 app/init.go 中的CSRFFilter() 。

    package app
    import (
    "github.com/cbonello/revel-csrf"
    "github.com/revel/revel"
    )
    func init() {
    //Filters is the default set of global filters.
     revel.Filters = []revel.Filter{
     revel.PanicFilter,//Recover from panics and display an error page instead.
     revel.RouterFilter,//Use the routing table to select the right Action
     revel.FilterConfiguringFilter,//A hook for adding or removing per-Action filters.
     revel.ParamsFilter,//Parse parameters into Controller.Params.
     revel.SessionFilter,//Restore and write the session cookie.
     revel.FlashFilter,//Restore and write the flash cookie.
     csrf.CSRFFilter,//CSRF prevention.
     revel.ValidationFilter,//Restore kept validation errors and save new ones from cookie.
     revel.I18nFilter,//Resolve the requested language
     revel.InterceptorFilter,//Run interceptors around the action.
     revel.ActionInvoker,//Invoke the action.
     }
    }

    在窗体中插入一个名为 csrf_token的隐藏输入字段。

    <form action="/Hello" method="POST">
     <input type="text" name="name"/>
     <input type="hidden" name="csrf_token" value="{{. csrf_token }}"/>
     <button type="submit">Send</button>
    </form>

    javascript代码示例,使用 jQuery 1.5和更新版本执行AJAX调用。

    function csrfSafeMethod(method) {
    //HTTP methods that do not require CSRF protection.
     return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
    }
    $.ajaxSetup({
     crossDomain: false,
     beforeSend: function(xhr, settings) {
     if (!csrfSafeMethod(settings.type)) {
     xhr.setRequestHeader("X-CSRFToken", {{. csrf_token }});
     }
     }
    });
    $("#AJAXForm").submit(function(event){
     event.preventDefault();
     $.ajax({
     type:"POST",
     url:"/Hello",
     data: {
     name: $("#AJAXFormName").val()
     },
     success: function(data) {
    //Switch to HTML code returned by server on success.
     jQuery("body").html(data);
     },
     error: function(jqXHR, status, errorThrown) {
     alert(jqXHR.statusText);
     },
     });
    });

    你可以调用 csrf.ExemptedFullPath() 或者 csrf.ExemptedGlob() 以免除路由到CSRF检查。 在演示应用程序中查看 app/init.go

    待办事项

    • 每个页面的唯一标记。
    • 测试用例。

    贡献者

    • Bretz
    • 艾伦地狱


    文章标签:  framework  PRE  CSRF  CSR  Revel  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语