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

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

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

Angularは、JavaScriptフレームワークです。AngularJSの後継であり、TypeScriptベースで実装されています。機能ごとに実装を分けやすく、コードの見通しが良いコンポーネント指向です。

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

Ruby on Rails

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

CSRF

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

Q&A

解決済

1回答

1471閲覧

トークン認証時のCSRF対策の必要性について

h_daido

総合スコア824

Angular

Angularは、JavaScriptフレームワークです。AngularJSの後継であり、TypeScriptベースで実装されています。機能ごとに実装を分けやすく、コードの見通しが良いコンポーネント指向です。

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

Ruby on Rails

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

CSRF

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

3グッド

4クリップ

投稿2018/10/26 02:16

編集2018/10/26 05:14

rails(APIサーバー)とangular(フロントエンド)でwebアプリケーションを構築しているものです。

認証方式はバックはdevise_token_auth、フロント側はangular-tokenを利用しており、
いわゆるセッション管理による認証ではなく、httpヘッダーにトークンを入れて認証するスタイルです。
モバイルアプリからAPIを利用する際の構成に近いと思います。

質問内容なのですが、いくつかのブログ記事でサーバー側のCSRFチェック機構をオフにするようなセットアップ内容が書かれていました。例えばこちらです
https://qiita.com/wktq/items/8a4653153af47933c169
railsではprotect_from_forgeryを利用してCSRFチェックするのですが、これがオフとされていました。

これは、
「認証方式がトークン式のため、CSRF攻撃者からヘッダー情報に認証用トークンを仕込むことができない(正確には認証用トークンを読み込むことができない)ため、不要としている」
という認識で合っているのでしょうか??

いくつか情報を検索したのですが、確信が持てず...。
ご教示いただけますと幸いです。


<追記: rails, deviseをご利用の同状況の方へ>

  • 仮にdevise_token_authとdeviseを同居させる場合、上記例外ケースに該当しないことになります。deviseは基本的にはセッションを利用した認証になりますので、devise_token_auth以外での認証も行う場合はご注意ください。
  • その場合はこちらのIssueに記載の内容に則して、application_controllerでなく、overrideしたコントローラーを作成してそちらでprotect_from_forgeryを無効化するのがおすすめです。
kamedd, kossytera👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

ご質問の状況ではあれば、確かにCSRF脆弱性にはならないと思います。
IPAの「安全なウェブサイトの作り方」にて、CSRF攻撃を受ける可能性があるサイトを以下のように説明しています。

次の技術を利用してセッション管理を実装しているウェブサイトが、CSRF攻撃による影響を受ける可能性があります。

  • Cookieを用いたセッション管理
  • Basic認証
  • SSLクライアント認証

「httpヘッダーにトークンを入れて認証するスタイル」は上記に該当しません。
ではなぜ問題ないかというと、CSRF攻撃では、利用者のブラウザから攻撃対象サイトにリクエストを送信する際に、自動的に認証情報やセッションIDが送信される必要があるからです。クッキーはこれに該当しますが、HTTPヘッダにトークンを埋め込むのは自動的にはされないので、CSRF攻撃の懸念はないと言えます。
ということで、下記の認識で問題ありません。

これは、
「認証方式がトークン式のため、CSRF攻撃者からヘッダー情報に認証用トークンを仕込むことができない(正確には認証用トークンを読み込むことができない)ため、不要としている」
という認識で合っているのでしょうか??

投稿2018/10/26 04:00

ockeghem

総合スコア11701

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

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

h_daido

2018/10/26 05:03

いつもご回答ありがとうございます! 安心することができました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問