概要
Go RevelフレームワークでAjax非同期処理を実装します。
CSRF 対策
以下コマンドにより
RevelフレームワークでCSFR対策する為のライブラリをインストール
1
| $ go get github.com/cbonello/revel-csrf
|
ajax実行時にCSRFチェックする為、init.goでのチェックを外すように設定
init.go
GitHub Gist: instantly share code, notes, and snippets.
以下CSRFのFilter設定
1 2 3 4 5 6
| func init() revel.Filters = []revel.Filter{ ... ... csrf.CSRFFilter, ...
|
conf/routes で実行するAPIのURLはAjax実行時にCSRFチェックする為、
init.goではチェックを対象外とする様に設定
1
| csrf.ExemptedFullPath("/api_execute")
|
View側の設定
<head>〜</head> 内にCSRFチェック用ハッシュ値をmeta情報として埋め込みます。
1
| <meta name="csrf-token" content="{{ .csrf_token }}">
|
jQueryファイル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| function setAjaxToken( token ) { $.ajaxSetup({ crossDomain: false, beforeSend: function(xhr, settings) { if (!csrfSafeMethod(settings.type)) { xhr.setRequestHeader("X-CSRFToken", token ); } } }); }
$(document).ready(function () { $(document).on("click", ".ajax_execute", function (event) { event.preventDefault();
setAjaxToken( postData['_token'] );
var ajaxParamas = {}; ajaxParamas["type"] = "POST"; ajaxParamas["url"] = action; ajaxParamas["data"] = postData; ajaxParamas["cache"] = false; ajaxParamas["dataType"] = "json";
$.ajax(ajaxParamas) .success( function(res) { console.log("(^-^) OK") }).error ( function() { console.log("(>_<) NG") }); return false; })
|
簡単…とは行ってない気がしますが
CSRF対策ができました。