対象の読者
CakePHPでフォーム画面の内容をサーバに送信する際、CSRF対策をしてなかったために、エラーが出て悩んでる方向けの記事です。
検証環境
■Windows11
■CakePHP(version 4.5.7)
CSRF対策とは?
CakePHPとLaravelではCSRF対策をしているForm以外はサーバに送信できません!!
クロスサイトリクエストフォージェリ(CSRF)とは、Webアプリケの「セッション管理」機能に対して、セキュリティ上の欠陥をピンポイントで狙ったサイバー攻撃の一種です。
このような攻撃からwebアプリケーションを防御するにあたって、CakePHPやLaravelではCSRF対策の技術が搭載されています。
今回は、CakePHPのアプリにおけるフォーム画面のCSRF対策の記述方法を見ていきましょう。
書き方はとてもカンタンです!
タグのすぐ下に、下記のコードを記載するだけです!<input type="hidden" name="_csrfToken" value="<?= $this->request->getAttribute('csrfToken') ?>"/>
では、フォーム画面の全体のコードを見てみましょう。↓
index.php
<h1>ログインフォーム</h1>
<div class="registerFormArea">
<form id="registerForm" class="" method="post" action="/registers/register" name="form">
<input type="hidden" name="_csrfToken" value="<?= $this->request->getAttribute('csrfToken') ?>"/>
<!--名前-->
<input type="text" id="yourNAme" name="yourNAme" class="yourNAme"/>
<!--メールアドレス-->
<input type="email" id="yourEmail" name="yourEmail" class="yourEmail"/>
<!--パスワード-->
<input type="password" id="yourPassword" name="yourPassword" class="yourPassword"/>
</form>
<button type="submit" class="btn" form="registerForm">
送信
</button>
</div>
CSRF対策をした<Formタグの中身を見てみる
さて、CSRF対策をしたフォーム画面の中身を見てみましょう。
キャプチャのとおり、何やらランダムな文字列が並んでいるのが分かりますね。
これでフォーム全体がCSRF対策が完了している証拠です。
以上となります。