前提・実現したいこと
codeigniter3で csrfの設定を行いたいです。
発生している問題・エラーメッセージ
(application\config\config.phpの「$config['csrf_protection'] = TRUE;」に設定) 画面ページAのFormに「<input type="hidden" name="csrf_test_name" value="9d3e28d9e57ce0ee7c194280a066e3d1" />」 が出力されているのを確認し、遷移先のページBでsessionに入れた値と比較しようとしたら、 $_POST['csrf_test_name']がnullでした。 何かの手違いかと思い、「print_r($_POST)」で確認したところ、 $_POST['csrf_test_name']がありませんでした。 web開発が初心者なので、誤解して覚えているかもしれませんが、 phpのcsrf対策は、formにhiddenタグでハッシュ値を埋め込み、 同値をセッションにも入れ、次ページでセッションの値とpostされた値を比較するつくりかと 思っていたのですが、codeigniterは、こういった方法ではないのでしょうか?
該当のソースコード
画面ページAのForm <form action="http://localhost/codeigniter/index.php/form" method="post" accept-charset="utf-8"> <input type="hidden" name="csrf_test_name" value="9d3e28d9e57ce0ee7c194280a066e3d1" /> <h5>ユーザ名</h5> <input type="text" name="username" value="" size="50" /> <h5>パスワード</h5> <input type="text" name="password" value="" size="50" /> <h5>パスワード確認</h5> <input type="text" name="passconf" value="" size="50" /> <h5>メールアドレス</h5> <input type="text" name="email" value="" size="50" /> <div><input type="submit" value="Submit" /></div> </form> 次ページで表示されたprint_r($_POST) Array ( [username] => test [password] => test [passconf] => test [email] => test@gmail.com )
試したこと
application\config\config.phpの「$config['csrf_protection'] = FALSE;」に設定し、
画面ページAのFormに
「<input type="hidden" name="csrf_test_name" value="9d3e28d9e57ce0ee7c194280a066e3d1" /> 」を
追加して行ったところ、
次ページで表示されたprint_r($_POST)は、
Array ( [username] => test [password] => test [passconf] => test [email] => test@gmail.com [csrf_test_name] => 9d3e28d9e57ce0ee7c194280a066e3d1 )
となりました。(あたりまえでしょうが。)
補足情報(FW/ツールのバージョンなど)
CodeIgniter-3.1.11
PHP Version 7.2.34
です。
回答1件
あなたの回答
tips
プレビュー