0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CakePHPでCSRF対策したフォームを送信する方法

Posted at

対象の読者

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対策が完了している証拠です。

cakePhp Csrf.png

以上となります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?