8

CodeIgniterで非常に奇妙なCSRF保護の問題が発生しています。form_openを使用してフォームを開始し、構成ファイルでcsrf_protectionがtrueに設定されていることを確認しました。また、非表示のcsrfの名前と値のフィールドがcsrf cookieと一致していることを確認しました:http:// d .pr/3cfB

フォームを送信すると、「エラーが発生しました。要求されたアクションは許可されていません」というメッセージが表示されます。エラーが発生し、理由がわかりません。csrf_protectionをオフにすると、フォームは正常に機能します。

さらに奇妙なのは、認証にtank_authライブラリを使用し、ログインフォームにもform_openを使用していることです。csrf_protectionがオンのときにログインフォームに非表示のcsrfフィールドがあることを確認し、フォームを送信して問題なくログインできました。

この問題をデバッグするために何ができるかについての考えはありますか?

4

2 に答える 2

2

まず、セッションクラスは、「csrf_salemarked_token $ ...」という名前のトークンではなく、「csrf_token_name」という名前のトークンを期待しています。

このブログ投稿では、Codeigniter2.0でのCSRF保護を備えたAJAXについて説明しています。

Tank_authは、Cookieではなく非表示の入力フォームフィールドからトークンを取得しています。AJAXリクエストは、利用可能な場合は非表示フィールドからトークンを取得する必要があり、フォームがない場合はCookieを取得する必要があります。

于 2011-03-20T14:44:29.583 に答える
1

問題を見つけました。私のカスタムライブラリの1つに、parent :: _ sanitize_globals()があります。これが、エラーの原因であると思われます。xssフィルタリングをオンにしている場合は、グローバルをサニタイズする必要がないことをどこかで読みました。

于 2011-03-20T17:14:34.033 に答える