練習用に書籍を管理するアプリケーションをPHP、MariaDBで作成しています。
CSRF対策を施す(トークンを埋め込む)場所についてアドバイスお願いします。
構成は下記。
①login.php
id、パスワード入力画面
セッションスタート、SESSIONにtokenを設定、hiddenでtokenをPOST送信。
↓
②login_check.php
POSTとSESSIONのtokenを照合。ID、パスワードの照合。パスワードが正しい場合は$_SESSION['login']=1を付与し、以後の全てのページでログイン状態の判別に使用。
照合し正しければログイン実行し③へ。
↓
③list.php
情報を修正する書籍の一覧。書籍を選択し④へ。
session_regenerate_id(true)でセッションIDの変更。
↓
④edit.php
変更する情報の入力画面。
変更する情報を⑤へPOST送信。
↓
⑤edit_check.php
入力値の検証、正しく入力されていればhiddenで入力値を⑥へPOST送信。
↓
⑥edit_done.php
データベースの更新。
書籍を登録・削除する機能なども作っていますが、今回は上記の流れのみでの話とします。
CSRF対策を施すのは重要な処理を行う部分のみという原則で考えると、重要な処理は
②のログインの実行
⑥のデータベース更新
だと思います。
⑥についてはすでにログイン状態であり、②以降で$_SESSION['login']によるログイン状態の判別、③でセッションIDの更新をしていることから第三者が編集処理をすることがないと判断しCSRF対策を行っていません。
こういった判断で①のみにトークンを埋め込んでいますが、認識は正しいのでしょうか。
⑥に対してもCSRF対策を施した(⑤にトークンを埋め込んだ)方がいいのでしょうか。
アドバイスお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/28 21:25