CakePHP3でCSRF対策

スポンサーリンク

CakePHP 3 で CSRF(Cross Site Request Forgery)対策を行う場合は、CSRF コンポーネントを利用できる。

Cross Site Request Forgery – CakePHP Cookbook 3.x documentation

上記の公式ドキュメントに詳細が書いてあります。

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

— 環境 —
CakePHP 3.1.1
PHP 5.5.19

コントローラーで CSRF コンポーネントを読み込む

CSRF コンポーネントを使うには、任意のコントローラーで読み込むだけです。

アプリケーション全体で CSRF コンポーネントを有効にする場合は、以下のとおり AppController で読み込むようにすれば良い。

src/Controller/AppController.php

ビュー(Template)のフォームに _csrfToken が追加される

上述のように CSRF コンポーネントをコントローラーで読み込む設定を行った後、ビュー(Template)のファイルでフォームヘルパー($this->Form->create)を使ってフォームを作成します。

そうすると、フォームの method が POST の場合に、CSRF 対策用トークンの hidden フィールド(_csrfToken)が、自動的にフォームに埋め込まれる。

ビューのファイル。

出力される HTML。_csrfToken の hidden フィールドが埋め込まれる。

フォームヘルパー($this->Form->create)を利用して、POST method となるフォームをビューで作成すると、CSRF 対策トークン用の hidden フィールドがフォームに追加されます。

試してみましたところ、以下のように GET method のフォームでは、CSRF 対策トークンの hidden フィールドは追加されませんでした。

以上です。

スポンサーリンク
私は Ruby on Rails の前は、PHP & CakePHP を使っていました(今も使いますけど)。PHP についてはオライリーの本を中心に軽く10冊以上は読み込みました。
 
スポンサーリンク

Leave Your Message!