2

CI CSRF 保護をオンにしており、http で正常に動作します。https をオンにすると (サイトのベース URL を https に変更し、すべてのトラフィックを http から https にリダイレクトすることによって)、次のように表示され始めます。

csrf token is missing on request

ログのエラー。Codeigniter は、次の 2 つのケースでこのエラーを報告します。

1) csrf トークンが POST 要求に含まれていない 2) csrf トークン Cookie が設定されていないか、有効期限が切れています。

カスタム ajax 関数にはデフォルトで csrf トークンが含まれているため、すべての投稿リクエスト (主に AJAX) には csrf トークンが含まれているため、#2 に違いないと考えています。さらに、セキュアな Cookie 設定と非セキュアな Cookie 設定の両方を選択して構成をいじりましたが、どちらの場合もこのエラーが発生しました。

私の推測では、csrf トークン Cookie が設定されていないか、暗号化されていません。私の主な問題は、自分のシステム (Ubuntu の Chrome) で再現できないことですが、本番環境にプッシュすると、ログがすぐに燃え上がるのを見ました。

私が間違っていること、またはこのような状況をデバッグする方法についてのアイデアはありますか? ありがとう!

セッションと Cookie の設定:

$config['sess_cookie_name']        = 'session';
$config['sess_expiration']         = 1209600;
$config['sess_expire_on_close']    = FALSE;
$config['sess_encrypt_cookie']     = FALSE;
$config['sess_use_database']       = FALSE;
$config['sess_table_name']         = 'ci_sessions';
$config['sess_match_ip']           = FALSE;
$config['sess_match_useragent']    = TRUE;
$config['sess_time_to_update']     = 300;


$config['cookie_prefix']    = "my";
$config['cookie_domain']    = "";
$config['cookie_path']      = "/";
$config['cookie_secure']    = myconfig('use_https'); //this is true when https 
//is forced, false otherwise
4

2 に答える 2

0

あなたがAJAX呼び出しについて言及したので、ここでランダムな答えを捨てるつもりです。CI CSRF保護で遭遇したこと:

http://blog.biernacki.ca/2011/12/enabling-csrf-protection-in-codeigniter-for-ajax-calls/

SSLは CSRF の動作とは関係がないためです。私はそれがそうだったとはまったく思いもしません。非 HTTPS ポートへの静的呼び出しを見ているか、ajax 呼び出しで CSRF のトークンを渡していません。

于 2012-08-19T06:25:22.267 に答える
0

ユーザーがhttps://example.comにアクセスしている可能性がありますが、リクエストはhttps://www.example.comに POST されています(またはその逆)。a) cookie_domain を「.example.com」に設定します。または b) https://example.com へのすべてのリクエストを https://www.example.com にリダイレクトする .htaccess ルール作成する

于 2013-09-17T20:08:08.090 に答える