FuelPHPでCSRF対策を実施する

FuelPHPには標準でCSRF対策を行ってくれる機能が用意されています。
下記はどの利用方法について説明します。
(利用バージョンはFuelPHP1.8)

ちなみに公式サイトにもやり方が記載されていますので合わせて確認すると良いかと思います。
Security – 概要 – FuelPHP ドキュメント

実装例

たとえば、下記のような構成でユーザー情報を更新する機能があったとします。
fuel/app/classes/controller/user.php
fuel/app/classes/views/user/update.php

View側

対応するviewファイルのformタグ内に下記の一行を追加します。
公式サイトでは3パターンほど実装例がありますが、タイプ量が少ない下記の記述方法が好みです。

<form method="post" enctype="multipart/form-data">

	<?php echo Form::csrf(); ?>

	<?php // 以下に必要なフォーム要素が続く ?>
</form>

Controller側

POSTされた際に呼び出される部分に「Security::check_token()」を追加。
下記の例では「HttpNotFoundException」をスローしてますがこちらは設計に合わせて適時処理を変更してください。


class Controller_User extends Controller_Template
{

	public function post_update()
	{
		// CSRF対策
		if ( ! Security::check_token())
		{
			// do somthing
			throw new HttpNotFoundException;
		}

		// 更新処理を継続
	}
}

ちなみに画面実装中はエラーが発生したりで修正・確認でブラウザのリロードを行う機会が多いですが、
そうするとContollerの「Security::check_token()」の条件分岐に引っかかるので、
開発中は一時的にコメントアウトしてます。

関連記事

過去にでCSRF対策がうまく動かなかったときの事例を記事にしてますので参考になればと思います。
FuelPHPでCSRFが動かない件

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る