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 JavaScript + XML