大企業営業から未経験ITエンジニアを目指すブログ

アラサー大企業営業から未経験ITエンジニアを目指すブログ。日々学んだことを忘備録的に記します。

Laravel 5.5を読み解く CSRF保護

https://readouble.com/laravel/5.5/ja/csrf.html

 

・Laravelではユーザーのセッションごとにトークンを発行している。このトークンが、ログインしているユーザ=リクエストの送信者なのかどうかを判断する。

webミドルウェアグループに含まれている、VerifyCsrfToken ミドルウェアが、リクエスト中のトークンとセッションに保存されているトークンが一致するか、確認しています。

 

・Laravelアプリ内でHTMLフォームを使う場合は、毎回隠しCSRFトークンフィールドをフォームに埋め込むべき。

<form method="POST" action="/profile">

{{ csrf_field() }} //<form>タグの直後に配置

 

・JacaScriptで駆動するアプリケーションを構築する場合、JavaScript HTTPライブラリーに対し、全ての送信リクエストへCSRFトークンを自動的に追加させると便利です。デフォルトでAxios HTTPライブラリにより、csrf-tokenメタタグの値が、resources/assets/js/bootstrap.jsファイルに登録されます。

 

・Webフックシステムを利用してフォームを送っている場合などでは、特定のURIだけCSRF保護の適用を外せる。

VerifyCsrfTokenミドルウェアの$exceptプロパティへ、そうしたURIを追加する。

 

・上記保護だけでなく、VerifyCsrfTokenミドルウェアにより、HTMLのメタタグにトークンを保存し、X-CSRF-TOKENリクエストヘッダの検査をすることも可能。

<meta name="csrf-token" content="{{ csrf_token() }}">

metaタグを作成したら、jQueryのようなライブラリーで、全リクエストヘッダにトークンを追加できます。この手法によりAJAXベースのアプリケーションにシンプルで便利なCSRF保護を提供できます。

$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});

 

 

<分からなかったところ>

・axiosとは

HTTP通信を簡単に行うことができるJavascriptライブラリ。HTTP通信と言うと用途がわかりづらいが、主にJSONの取得に利用されることが多い。特徴は下記。

XML HttpReqestを簡単に生成できる
・Promiseベースである
・カスタムヘッダーやBasic認証など、いろいろなオプションが手軽にできる

https://www.yoheim.net/blog.php?q=20170801

https://iwb.jp/javascript-library-axios-howto/

 

・バイナリデータとは

テキストデータの対。コンピュータ語のデータ・

https://wa3.i-3-i.info/word1146.html

 

Ajaxとは

ある実装方式のこと。具体的には、JavaScriptの非同期通信機能を使ってXML形式のデータをサーバとやりとりしてページを表示すること。

Asynchronous JavaScriptXML

https://wa3.i-3-i.info/word12672.html