Yii2でのCSRF対策のカスタムフォーム設定方法


まず最初に、フォームビューに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対策をカスタムフォームに適用する方法の概要です。必要に応じて、コードをカスタマイズしてください。