質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

CSRF

クロスサイトリクエストフォージェリ (Cross site request forgeries、CSRF)は、 外部Webページから、HTTPリクエストによって、 Webサイトの機能の一部が実行されてしまうWWWにおける攻撃手法です。

Q&A

1回答

4275閲覧

Railsのprotect_from_forgeryで生成されるauthenticity_tokenの信ぴょう性

kenixi

総合スコア91

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

CSRF

クロスサイトリクエストフォージェリ (Cross site request forgeries、CSRF)は、 外部Webページから、HTTPリクエストによって、 Webサイトの機能の一部が実行されてしまうWWWにおける攻撃手法です。

0グッド

1クリップ

投稿2016/07/28 13:35

編集2016/07/29 02:30

ひょんなことからRailsのアプリを触る機会があり、Railsデフォルトで用意されているCSRF対策について調査しています。

Railsではデフォルトでapplication_controller内にprotect_from_forgery with: :exceptionの記述があります。

これにより、POST、PUTの際にヘルパーが自動的にauthenticity_tokenを生成(もしくはヘッダーに付与)し、セッション変数と照らし合わせることによりCSRFの対策をしているようです。

しかしながら、実際の挙動を確認したところ、

一度生成されたauthenticity_tokenは使いまわしが可能

という挙動になっていました。

authenticity_tokenは通常にサイト内回遊すると、毎回別のトークンが生成されますが、「必ずしもそこで生成されたトークンである必要はない」ということです。(前ページで生成されたトークンも使用可能)
※もちろん別セッションとなった場合の使い回しは不可能

これってCSRF対策として十分なんでしょうか?仮にauthenticity_tokenの値を知り得てしまった場合、セッションが消えるまではそのトークンを用いることでリクエスト自体は通ってしまうため、ちょっと微妙なのでは、、、?と思ってます。

この辺りの挙動/あるべき姿に詳しい方からのご教示をお待ちしています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

別のセッションで生成されたトークンが有効なら問題ですが、ご指摘の状態は問題ありません。というか、そうあるべきものです。
というのは、複数タブで同じアプリケーションを開いていると、まさに「前ページで生成されたトークン」が使われる状況はあり得るからです。
逆に最新のトークンのみ有効にしてしまうと、複数タブが開いている状況などで、正当なリクエストがブロックされる原因になります。

投稿2018/10/29 04:12

ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問