質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

CSRF

クロスサイトリクエストフォージェリ (Cross site request forgeries、CSRF)は、 外部Webページから、HTTPリクエストによって、 Webサイトの機能の一部が実行されてしまうWWWにおける攻撃手法です。

解決済

codeigniter ver.3のcsrfの使い方がわからない

muramura5011
muramura5011

総合スコア0

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

CSRF

クロスサイトリクエストフォージェリ (Cross site request forgeries、CSRF)は、 外部Webページから、HTTPリクエストによって、 Webサイトの機能の一部が実行されてしまうWWWにおける攻撃手法です。

1回答

0リアクション

0クリップ

1317閲覧

投稿2021/01/29 06:01

編集2021/01/29 08:37

前提・実現したいこと

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
です。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

m.ts10806

2021/01/29 07:53

$POSTという変数は質問者さんが定義したんですか?
muramura5011

2021/01/29 08:36

大変申し訳ございません。 $POST['csrf_test_name']ではなく、$_POST['csrf_test_name']でした。 記事の訂正いたします。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

CSRF

クロスサイトリクエストフォージェリ (Cross site request forgeries、CSRF)は、 外部Webページから、HTTPリクエストによって、 Webサイトの機能の一部が実行されてしまうWWWにおける攻撃手法です。