- 更新日: 2015年11月25日
- PHP & CakePHP
CakePHP3でCSRF対策
CakePHP 3 で CSRF(Cross Site Request Forgery)対策を行う場合は、CSRF コンポーネントを利用できる。
Cross Site Request Forgery – CakePHP Cookbook 3.x documentation
上記の公式ドキュメントに詳細が書いてあります。
— 環境 —
CakePHP 3.1.1
PHP 5.5.19
コントローラーで CSRF コンポーネントを読み込む
CSRF コンポーネントを使うには、任意のコントローラーで読み込むだけです。
1 2 3 4 5 |
public function initialize() { parent::initialize(); $this->loadComponent('Csrf'); } |
アプリケーション全体で CSRF コンポーネントを有効にする場合は、以下のとおり AppController で読み込むようにすれば良い。
src/Controller/AppController.php
1 2 3 4 5 6 7 8 9 |
class AppController extends Controller { public function initialize() { $this->loadComponent('Csrf'); } // ... } |
ビュー(Template)のフォームに _csrfToken が追加される
上述のように CSRF コンポーネントをコントローラーで読み込む設定を行った後、ビュー(Template)のファイルでフォームヘルパー($this->Form->create)を使ってフォームを作成します。
そうすると、フォームの method が POST の場合に、CSRF 対策用トークンの hidden フィールド(_csrfToken)が、自動的にフォームに埋め込まれる。
ビューのファイル。
1 2 3 |
<?= $this->Form->create(); ?> // または <?= $this->Form->create(NULL, ['type' => 'POST']); ?> |
出力される HTML。_csrfToken の hidden フィールドが埋め込まれる。
1 2 |
<input type="hidden" name="_method" value="POST"/> <input type="hidden" name="_csrfToken" value="449d2559e20c55bbd5b6cb61a1578300071653fc"/> |
フォームヘルパー($this->Form->create)を利用して、POST method となるフォームをビューで作成すると、CSRF 対策トークン用の hidden フィールドがフォームに追加されます。
試してみましたところ、以下のように GET method のフォームでは、CSRF 対策トークンの hidden フィールドは追加されませんでした。
1 |
<?= $this->Form->create(NULL, ['type' => 'GET']); ?> |
以上です。
- – 参考リンク –
- Controllers – CakePHP Cookbook 3.x documentation
- Deployment – CakePHP Cookbook 3.x documentation
- CakePHP3 CSRFトークンをフォームに埋め込みたい。 – かもメモ
- PHP & CakePHP の関連記事
- PHP+MySQLでNo such file or directoryエラー
- bin/cakeコマンドでintlエラーが出る場合の対処(CakePHP)
- CakePHPアプリケーションをCapistranoでデプロイ
- Integrity constraint violation:Column ‘created’ in order clause is ambiguousエラー/CakePHP
- CakePHPでDB関連テーブルのレコード・データを取得
- CakePHPでカラム属性に別名/エイリアスを付ける仮想フィールド
- CakePHPで日付選択フォームのカスタマイズ
- CakePHP3で現在のコントローラー名・アクション名を取得
- PHPインストールでconfigure: error: freetype.h not foundエラー
- CakePHPでログイン後に元のページにリダイレクトさせる
Leave Your Message!