CSRF 対策のために行う Token::create() は、複数テーブルがある場合は各テーブルに記述するのですか?

CSRF 対策はデータベースやテーブルの有無、個数には関係ないため、生成するのは 1 つのトークンで十分です。
2022年3月22日
ユーザー

いつも丁寧かつ分かりやすい動画をありがとうございます。

今回の動画では扱うテーブルが todos のみなので Todo クラスのコンストラクタ内に Token::create() 記述で納得できたのですが、他にもテーブルがあった場合などでも各テーブル用のクラス内に記述するものでしょうか。

ーーーーーーーーーーーー

複数のテーブルを扱う場合、以下のようなイメージでしょうか。
例として、全てユーザーからの POST 送信や DB 処理があるものとしています。

Todo クラス( todos テーブルのクラス)のコンストラクタに Token::create() を仕込む。
User クラス( users テーブルのクラス)のコンストラクタに Token::create() を仕込む。
Project クラス( projects テーブルのクラス)のコンストラクタに Token::create() を仕込む。

ーーーーーーーーーーーー

それとも index.php に以下のように書くイメージが主流ですか。
例として以下は index.php から、全テーブルのいずれかへの POST 送信が来る可能性があるものとしています。

// ここでトークン生成
Token::create();

// 以下の各テーブル処理のクラスにはToken::create()を記述しない。
Todo::processPost();
User::processPost();
Project::processPost();

ーーーーーーーーーー

自分なりにメリット・デメリットを考えてみました。

●全ての各テーブル処理クラスに Token::create() を埋め込む
メリット:テーブル処理クラスを使うたびに Token::create() を記述しなくて済む。
デメリット:複数のテーブル処理クラスを同時に使う場合は重複処理となる。

●各テーブル処理クラスには書かず、適時 外に Token::create() を記述する
メリット デメリットは上記の反対となる。

Token::create() は生成済なら生成処理しませんが if 文の処理が重複します。あまり気にしなくていいのでしょうか。

こうして まとめてみると、毎回 Token::create() を記述しなくて済む
「全ての各テーブル処理クラスに Token::create() を埋め込む」
方が楽で良い気がしてきました。

実際の現場ではどうなのかなど全く感覚が分かっていませんので、どうかお願いします。

この回答を見るにはプレミアムプランへの登録が必要です

プレミアムプランとは?

このレッスンの質問と回答(2)