回答編集履歴
1
コメントに対する回答を追記しました
answer
CHANGED
@@ -1,3 +1,19 @@
|
|
1
1
|
> あくまで$config['csrf_protectin] = TRUEおよび$config['csrf_regenerate'] = TRUEとしたうえで、ajaxを利用したいのですが、どなたか解決策をお教えいただけないでしょうか。
|
2
2
|
|
3
|
-
$config['csrf_regenerate'] = TRUE としたい理由は何でしょうか?
|
3
|
+
$config['csrf_regenerate'] = TRUE としたい理由は何でしょうか?
|
4
|
+
|
5
|
+
---
|
6
|
+
追記
|
7
|
+
|
8
|
+
> 今回のようなアプリケーションの場合、regenerateを切っておくのが普通というか、有効にする理由がないのでしょうか。
|
9
|
+
|
10
|
+
|
11
|
+
例えば、以下のドキュメントには次のように書かれています。
|
12
|
+
|
13
|
+
https://codeigniter.jp/user_guide/3/libraries/security.html
|
14
|
+
|
15
|
+
> トークンは、すべてのサブミット時に再生成する(デフォルト)か、 CSRF クッキーの生存期間は同一の値で維持するかのどちらかになります。 デフォルトであるトークン再生成はより厳格なセキュリティを提供しますが、 他のトークンが無効になることでユーザビリティの問題をもたらす可能性があります (戻る/進むナビゲーション、複数のタブ/ウィンドウ、非同期アクションなど)。 次の config パラメータを編集することによって、この動作を変更することができます。
|
16
|
+
|
17
|
+
今回のケースは非同期アクションに該当しますね。つまり、元々$config['csrf_regenerate'] = TRUE が使えないシーンであるわけです。
|
18
|
+
それでは、$config['csrf_regenerate'] = TRUE でないとCSRF攻撃にあう可能性が高まるかというと、そんなことはありません。なので、$config['csrf_regenerate'] = TRUE とするために、トリッキーなことをしてしまうと、かえって、その複雑でトリッキーな処理に脆弱性が入る可能性が高くなります。
|
19
|
+
アプリケーションは単純に書くほどバグは少なくなるわけで、脆弱性もバグの一種ですから、複雑なことをすると脆弱性も傾向としては増えるのです。
|