まず最初に、フォームビューにCSRFトークンを埋め込む必要があります。次のコードは、yii\helpers\Html
ヘルパーを使用してCSRFトークンを生成し、フォームに埋め込む例です。
use yii\helpers\Html;
// フォームビュー内の適切な場所に以下のコードを追加します
echo Html::hiddenInput(Yii::$app->request->csrfParam, Yii::$app->request->csrfToken);
次に、コントローラーのアクションメソッドで、CSRFトークンの検証を行う必要があります。以下のコードは、アクションメソッド内でCSRFトークンを検証する例です。
use yii\web\BadRequestHttpException;
// アクションメソッド内で以下のコードを追加します
$csrfToken = Yii::$app->request->getCsrfToken();
if (!Yii::$app->request->validateCsrfToken($csrfToken)) {
throw new BadRequestHttpException('無効なCSRFトークンです。');
}
上記の例では、CSRFトークンの検証に失敗した場合、BadRequestHttpException
をスローしています。適宜、エラーメッセージを変更してください。
これで、カスタムフォームにおけるCSRF対策が有効になりました。フォームの送信時には、生成されたトークンが正当であるかどうかが検証されます。
以上が、Yii2でのCSRF対策をカスタムフォームに適用する方法の概要です。必要に応じて、コードをカスタマイズしてください。