質問編集履歴

1

具体的に変更

2016/07/29 02:30

投稿

kenixi
kenixi

スコア91

test CHANGED
@@ -1 +1 @@
1
- RailsのCSRFについて
1
+ Railsのprotect_from_forgeryで生成されるauthenticity_tokenの信ぴょう性
test CHANGED
@@ -1,13 +1,35 @@
1
- RailsでCSRF周りの確認をしています。
1
+ ひょんなことからRailsのアプリを触る機会があり、Railsデフォルト用意されているCSRF対策について調査しています。
2
2
 
3
3
 
4
4
 
5
- ヘルパー使えばrailsでauthenticity_tokenを生成してくれますが、「同じauthenticity_token」を使ってPOST,PUT出来てしいます。
5
+ Railsではデフォルトで`application_controller`内に`protect_from_forgery with: :exception`の記述があります。
6
6
 
7
7
 
8
8
 
9
- authenticity_tokenっていわゆるワンタイムトのようなものだいう認識だったので、何回も同じauthenticity_tokenを使えることが腑落ちず調査していす。
9
+ これにより、POST、PUTの際にヘルパーが自動的に`authenticity_token`を生成(もしくはヘッダに付与)し、セッショ変数照らし合わせることによりCSRFの対策をしているようです。
10
10
 
11
11
 
12
12
 
13
+ しかしながら、実際の挙動を確認したところ、
14
+
15
+
16
+
17
+ **一度生成された`authenticity_token`は使いまわしが可能**
18
+
19
+
20
+
21
+ という挙動になっていました。
22
+
23
+
24
+
25
+ `authenticity_token`は通常にサイト内回遊すると、毎回別のトークンが生成されますが、「必ずしもそこで生成されたトークンである必要はない」ということです。(前ページで生成されたトークンも使用可能)
26
+
27
+ ※もちろん別セッションとなった場合の使い回しは不可能
28
+
29
+
30
+
31
+ これってCSRF対策として十分なんでしょうか?仮に`authenticity_token`の値を知り得てしまった場合、セッションが消えるまではそのトークンを用いることでリクエスト自体は通ってしまうため、ちょっと微妙なのでは、、、?と思ってます。
32
+
33
+
34
+
13
- この辺りの挙動にてご存知のっしゃいましたらご教示ください。
35
+ この辺りの挙動/あるべき姿詳しい方ご教示をお待ちしてます