ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

【Play Framework】エラー「RuntimeException: Missing CSRF Token」

CSRFってご存じですか?


詳しくの説明は別の機会でログを残しますが(俺もまだよくわかっていない)、ワンタイムidをviewにセットして、セッション書き換えなどの脆弱性から守るための仕組みです。


問い合わせフォームとかでよく使われると思っていますが、今回Play Frameworkで開発していて、Google Chromeではうまくいった処理が何故かFireFoxSafariで失敗する現象を確認したのでメモします。


といっても、単純でした。そもそも効いていなかったのが原因でした。


詳しくは、viewではCSRFを設定していたけど、controllerでは設定していなかったのが原因です。

    // 表示するAction
    @AddCSRFToken // これがなかった。
    public static Result show()  {
       // 省略
    }


    // 更新するAction
    @RequireCSRFCheck // これもなかった。
    public static Result post(long id) {
      // 省略
    }


Google Chromeでは何故かエラーが出ず、他のブラウザではチェックが厳しいのでエラーが発生したと見るべきでしょう。


うーむ。Chrome...(俺が悪いんだけどねorz)

【PHP】$_SERVERというスーパーグローバル変数からURIを取得する方法。あ、アンチパターン記事です。

WordPressで開いているページのuriを修正して別リンクにするということをやりたかったときに書いたプログラムをメモ。

<?php
$uri = $_SERVER['REQUEST_URI'];
$replaceUri = preg_replace('/^\/.+?\/(.+)?\/$/', '$1', $uri);


でもこれって、ダメらしい。なぜなら$_SERVER['REQUEST_URI']という値は、必ずしも/の値からスタートするものではない。つまりリクエスト次第ではhttp://〜からスタートするリクエストもあるとか。


今度調べる。こわひPHP