さっしーブログ

埼玉県在住のシステムエンジニアです。基本的には技術的な内容を中心に発信していきます。

PlayFramework2.6.xでフォームからPOST送信したら403が返ってきたら

PlayFramework2.6.xでフォームからPOST送信した際に、
下記警告が発生し403(Unauthorized)が返ってきた。

[warn] p.filters.CSRF - [CSRF] Check failed because no token found in headers for /login?userId=test&password=test

CSRF対策のチェックでPOST送信が弾かれてる。。。

CSRF対策はすべきなのですが、
とりあえず現状ローカル環境で作業しているだけですので、
チェック自体を一時的に無効化して対処します。

とりあえずPOSTで送信するエンドポイントに対して、下記の対処を行います。

routes

+nocsrf
POST /login controllers.RestController.login()

routesファイルに「 +nocsrf 」修飾子を付与してあげることで、そのエンドポイントに対してCSRF対策を無効化しています。

これでPOST送信ができるようになりました。

下記のサイトからダウンロードしたのですが、このスタータープロジェクトを使用したのが原因のようですね。

Note that the seed templates are already configured with CSRF and security headers filters, whereas the other projects are not specifically set up for security out of the box.

シードテンプレートはCSRFおよびセキュリティヘッダーフィルタで既に設定されていますが、他のプロジェクトはボックス外のセキュリティのために特別に設定されていないことに注意してください。

と記載がありますし。。。

以前、現場でPlayFrameworkを使用していたときは、
activatorを使用してプロジェクトを作成しており今回のような事象が発生したのは初めてです。

現状はローカルでの作業をすすめるために無効化しましたが、
今後CSRF対策もしっかりアプリケーションに取り込めるように調査して勉強していきます。

以上