🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

SPA(Single-page Application)

SPA(Single-page Application)は、単一のWebページのみでコンテンツの切り替えができるWebアプリケーションもしくはWebサイトです。ブラウザでのページ遷移がないため、デスクトップアプリケーションのようなUXを提供します。

Firebase Authentication

Firebase Authenticationは、Firebaseを利用したユーザーの認証機能です。バックエンドサービス、SDK、アプリでのユーザー認証に使用できるUIライブラリが用意されています。

XSS

XSS【クロスサイトスクリプティング】は、 ソフトウェアのセキュリティホールの一つで、Webサイトに脆弱性が あることからその脆弱性を利用し攻撃する手法です。 主に、入力フォームなどから悪意あるスクリプトを挿入し 該当ページを閲覧したブラウザ上でそのスクリプトを実行します。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

7800閲覧

Firebase Authenticationのセキュリティについて(トークンとXSS)

Newbi

総合スコア163

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

SPA(Single-page Application)

SPA(Single-page Application)は、単一のWebページのみでコンテンツの切り替えができるWebアプリケーションもしくはWebサイトです。ブラウザでのページ遷移がないため、デスクトップアプリケーションのようなUXを提供します。

Firebase Authentication

Firebase Authenticationは、Firebaseを利用したユーザーの認証機能です。バックエンドサービス、SDK、アプリでのユーザー認証に使用できるUIライブラリが用意されています。

XSS

XSS【クロスサイトスクリプティング】は、 ソフトウェアのセキュリティホールの一つで、Webサイトに脆弱性が あることからその脆弱性を利用し攻撃する手法です。 主に、入力フォームなどから悪意あるスクリプトを挿入し 該当ページを閲覧したブラウザ上でそのスクリプトを実行します。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

3クリップ

投稿2021/03/11 15:28

編集2021/03/12 01:37

お世話になっております

Firebase Authenticationを使おうと思っているのですが、
セキュリティについて気になる点があったので、ご教授いただきたいです

構成はクライアント(SPA)とAPIサーバー(Firebase admin)として、
ユーザーの認証は以下のような流れで公式に書いてあります

1 クライアントでトークンを取得し, APIサーバーに送信
2 APIサーバーはverifyIdToken(またはVerifyIDTokenAndCheckRevoked)でトークンを検証

公式URL: IDトークンを検証する

このトークンはセッション管理に使用されていると思われますが(参考URL)、
トークン自体はブラウザのindexedDBに保存されています

SPAのユーザー認証でlocalStorageに入れるとXSSのリスクがあるというのは有名です
Cookie(httponly + secure)とサーバーサイド側のセッション管理をするのが現状は無難という認識ですが、

Firebase Authenticationについて、以下の認識で合っていますでしょうか?

1 セッション管理はしている
2 しかし、indexedDBなのでXSSのリスクはある(localStorageで取り上げるよくある問題)

他にもセキュリティリスクがあったらぜひ教えていただきたいです
お手数ですが、よろしくお願いいたします

追記
ご指摘をいただいて、今回の質問はXSSではないかもしれません

今回の質問は、ユーザーの入力値などでJavaScriptが実行されるものではなく、
scriptタグなどで第三者のJSを実行している時、その第三者のJSが改ざんされ、localStorage/indexedDBの値を抜かれるというものです

こちらの記事を読んで気になりました
https://techracho.bpsinc.jp/hachi8833/2019_10_09/80851

そうそうあることではないと思いますが、このあたりを意識する場合、Firebase Authenticationで何か対応されていることはありますでしょうか

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/03/11 15:41

> SPAのユーザー認証でlocalStorageに入れるとXSSのリスクがあるというのは有名です これ、何を指してます? 概要の説明か理解している内容を説明したサイトを教えてもらえますか?
Newbi

2021/03/11 15:54

ありがとうございます SPA localStorageで検索するとけっこう出てくると思います Qiitaのこの記事が概要は分かりやすいと思います ちなみに、私が質問したことはこちらの記事ですでに書かれているような気はしますが、 Firebaseで認証をしているサービスを聞くので、私が質問している内容のとおりで、本番運用しているのか気になりました(調べ方が足りないだけで、XSSにきちんと対策できているのかどうか...) https://qiita.com/stomita/items/4583552d6c44c0fc8be6 https://qiita.com/T-Tokumori/items/b531d2c8612747dabe1e
guest

回答2

0

Reactを使っていてもXSSのリスクは結構あるので、アプリケーション側の注意点を勉強して対策いただく必要があります。また、API側にもXSSの可能性があります。

また、HttpOnlyのCookieを使っていても、cookie自体を盗むことが難しくなるだけで、XSS攻撃はあまり緩和されません。これの説明用のYouTube動画を作っていますので、ご覧ください。

クロスサイトスクリプティング(XSS)対策としてCookieのHttpOnly属性でどこまで安全になるのか - YouTube

ということで、まとめると下記のようになります。

  • localStorage / sessionStorage / indexedDB「だと」XSSのリスクがあるという言説は誤り
  • なぜなら、HttpOnlyなCookie「でも」XSSのリスクはあるから
  • 「Reactを使っていればXSSの心配はない」も誤り(そんなに甘くない)

一方、以下は正しいです。

  • localStorage / sessionStorage / indexedDB だとCSRFのリスクは生じないが、CookieだとCSRFのリスクがある

また、リスクや対策の難しさでは XSS > CSRF なので、

  • 何を使うにせよ XSS 対策は重要

ということです。

投稿2021/03/12 03:26

ockeghem

総合スコア11705

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

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

Newbi

2021/03/12 19:52 編集

ありがとうございます! YouTubeの動画とても分かりやすかったです! ajaxでhttponlyのCookieを悪用するとは思いませんでした(以前に動画を拝見した時はいまいち実感として分からなかったのですが、最近悩んでいたので、とても勉強になりました) お2人にベストアンサーを押したいですが、 te2jiさんにockeghemさんのご回答をご紹介していただいたり、 >scriptタグなどで第三者のJSを実行している時、その第三者のJSが改ざんされ この部分について丁寧にご指摘をいただいたので、今回はte2jiさんにベストアンサーをさせていただきたいと思います ご回答いただいて本当にありがとうございました! XSSについてもっと調べた上で、開発に臨みたいと思います!
guest

0

ベストアンサー

なんとなくですが、XSS のリスクや用語の定義が若干ズレてる気がするんですよね。。。
リンク先で大きくずれているものは無かったので、うまく説明できないただの違和感なんですけど。

とりあえずトークンの保管場所に関しては、最近、徳丸さんにねだって書いてもらった回答が参考になると思うのでリンクしておきます。

JWTなどのTokenをlocalstrage(HTML5の)に保管することについて - teratail

その他のリスクは私も興味がありますw

投稿2021/03/11 23:53

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Newbi

2021/03/12 01:29

ご回答ありがとうございます 徳丸さんのご回答とても参考になりました! 今回の質問は、私が誤解していて、XSSではないのかもしれません... ユーザーの入力値などでJavaScriptが実行される、という点は、React等フレームワークを気を付けて使っていたら大丈夫かなと思っています 私が気になっている点は、 第三者のライブラリなどに、localStorage/indexedDBを取得するコードがある場合です(悪意のあるコードです) npmは事前に自分で調べたら大体大丈夫だと思いますが(全部は厳しいですが、全部チェックする必要はないとは思います)、 例えばscriptタグで他サービスのJSを呼び出している場合、そのサービスが改ざんされ、localStorage/indexedDBを抜かれる、という点で、セキュリティを意識するサービスは、現状httponlyのcookieがいいのかなという理解です こちらの記事に書いてあったので、気になりました https://techracho.bpsinc.jp/hachi8833/2019_10_09/80851 の、「local storageが危険な理由と、そこに秘密データを保存してはならない理由」の内容です そうそうあることではないと思いますが、Firebaseの本番運用の際にそのあたりを何か対策されているのか気になっています
退会済みユーザー

退会済みユーザー

2021/03/12 05:43

XSS の話ではなさそうですね。 CDN 配布のライブラリの信頼性の担保とか CORS の設定の話なのかなぁ。。。 多分、質問内容が全く変わってしまうと思うので(場合によっては質問を別で立てることも視野に入れて)再度整理してみては? 主題として Firebase Authentication に関しての質問なのかも整理が必要だと思います。
Newbi

2021/03/12 19:59

ありがとうございます XSSの話ではなさそうなので、こちらもう少し調べたいと思います!(localStorage/indexedDBを抜かれるという点でXSSとごっちゃになっていたと思います) ockeghemさんにもご回答いただいて、SPAのユーザー認証の理解を深めることができたと思うので、いったん整理してみたいと思います お2人にベストアンサーを押したいですが、 ockeghemさんのご回答をご紹介していただいたり、 >scriptタグなどで第三者のJSを実行している時、その第三者のJSが改ざんされ この部分について丁寧にご指摘をいただけたので、 今回はte2jiさんにベストアンサーをさせていただきたいと思います ご回答いただいて本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問