回答編集履歴

1

コメントに対する回答を追記しました

2018/09/02 09:15

投稿

ockeghem
ockeghem

スコア11701

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