Statamic v2 フォーム送信時に csrf_token エラーが出る

2017/04/01

Statamic v2でフォームの送信時に csrf_token エラーが表示され、フォームが送信されないという障害がありました。

StatamicはLaravelというフレームワークを採用しており、このcsrf_tokenエラーはこのLaravelに起因するエラーでした。

症状とエラーログ

症状:フォームのSubmitボタンクリック時にログイン画面が表示されてしまう。

## エラーログ /local/storage/logs/

production.ERROR: exception 'Illuminate\Session\TokenMismatchException' in /html/statamic/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:53

解決方法(新:4/10追記)

本家のサポートに問い合わせたところ「管理画面で設定できるよ」とのこと。確認するとありました。。

【ログイン>Setting>System】画面の一番下に「CSRF Excluded URLs」とあります。ここに除外するURLを登録すればOK。今回の例ではotoiawase/*としました。前回(下の)作業で変更したlaravelのコアファイルは元に戻して、動作確認完了。いい勉強になりました。

解決方法(旧:これ以降は過去の情報です)

参考:StackOverflow:Laravel 5 でのPOSTでのルーティングがうまくいかない

参考先には「もうすぐリリースされる、ver 5.1 ではapp/Http/Middleware/VerifyCsrfToken.php内で、$exceptを設定することで、特定のルートのみcsrf_tokenのチェックをOFFにするのが出来るようになります。」とあったので、該当のファイル/html/statamic/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.phpを確認。$exceptを設定するブロックが確認できたので、次のように該当するURIを指定。

例)/otoiawase/のみcsrf_tokenのチェックを無効にする

# VerifyCsrfToken.php L:25

protected $except = [
  'otoiawase/*',
];

補足

CSRFはセキュリティ対策の一つ。IPA ISEC セキュア・プログラミング講座:Webアプリケーション編 第4章 セッション対策:リクエスト強要(CSRF)対策

Laravel5では全てのPOSTにCSRFチェックが付いてくるとのこと。便利ではありますが、CSRFトークンが設定されていない場合はエラーになってしまいます。全てのPOSTにおいてCSRFチェックをオフにする方法もありますが、URIを絞れる場合は該当のURIのみを対象にチェックを無効にした方が良いでしょう。

注意

Statamic本体のバージョンアップを適用することにより、この設定が上書きされる(消される)可能性が高いので、バージョンアップの都度確認が必要。この辺り、なんとかならんかな。

一つ前のページへ
867867.com

Contents

Get in touch

これからも、仕事と遊びを通して多くの方と出会えますように。

お問い合わせ
株式会社グランフェアズ
facebook

© 867867.com All Rights Reserved.

menu