Help us understand the problem. What is going on with this article?

Firebase apiKey ってさらしていいの? ほんとに?

界隈でちょくちょく質問されているのを見るので調べたことをまとめてみました。
結論だけで言うと、「よい」です。

Firebase apiKey? なに?

Firebase project を作成すると projectId はもちろん apiKey や databaseURL などが作成され、これを使うことで機能が使えるようになります。Firebase console でいうと Project 設定などから [アプリを追加] すると取得できます。
image.png
詳しい手順はこちら。https://support.google.com/firebase/answer/7015592?authuser=0

(値は仮です)
  var config = {
    apiKey: "CcN0p0MAIzavPCNkmXSyAy4xhKwCF6CqbX5TcvL",
    authDomain: "example.firebaseapp.com",
    databaseURL: "https://example.firebaseio.com",
    projectId: "example",
    storageBucket: "example.appspot.com",
    messagingSenderId: "032531346579"
  };
  firebase.initializeApp(config);

"apiKey" っていう名前がよくないと思うのですが、(Firebase らしく) client に含めて使う == エンドユーザーの手元に直接届く/保存される、すなわち public 情報である前提のものです。

実は ...?

この設定値、そもそも Firebase Hosting を有効にすると、自動で そのサイトから /__/firebase/init.js という path で参照できるようになります。Hosting を Authentication などとあわせて使うときのために、最初から置いてくれているわけです。気が利いてますね。このあたりは使い方が以下にドキュメントされています。

https://firebase.google.com/docs/hosting/reserved-urls#sdk_auto-configuration

<!-- load Firebase SDK before loading this file -->
<script src="/__/firebase/init.js"></script>

こういうところから見ても、公開前提の値であり隠すようなものではないということがわかります。
というかこんな便利なことはもっと宣伝してほしい。
(angular/fire でこれを使ってうまく初期化する方法は模索中)

よかった ... のだね?

はい。ただし、一部気をつけることがあります。

Firestore

この設定値がわかると、その project の Firestore にかんたんにアクセスできます。Firestore の設定が test mode になっていて rule があまくなっていると、データを抜かれたり荒らされたりするかもしれません。

たとえば。当初ある project では Firestore のみ Admin API からだけ利用するつもりでいたので Firestore の rule はあまり気にしていなかったが、リリース直前になって簡単なサイトが必要になったので Hosting を有効にしたら config が公開されて... というシナリオが考えられます。

もともとはじぶんで疑問に思って web にあたってみたのですが、このあたりが参考になりました。
https://stackoverflow.com/questions/37482366/is-it-safe-to-expose-firebase-apikey-to-the-public

たしかに、Firebase project で billing が有効になっていると利用料を増やす嫌がらせとかはできそうですね。ただそれはサイトの利用を単に増やすだけ (なつかしの F5 アタック的な) でもできるので、特有の事情とは言えないかも。

そして? 他にもあるかも?

危険はあらゆる場所に潜んでいる。何かあったら教えてください。

更新 20200105 : console で config の取得方法が変わっていたので更新しました。

hoshymo
端っこのほうでどうにか生きつないでいるエンジニアです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした