[解決済み] FirebaseのapiKeyを公開しても大丈夫ですか?
質問
その
Firebase Web-Appガイド
には、与えられた
apiKey
をHtmlに記述して、Firebaseを初期化する。
// TODO: Replace with your project's customized code snippet
<script src="https://www.gstatic.com/firebasejs/3.0.2/firebase.js"></script>
<script>
// Initialize Firebase
var config = {
apiKey: '<your-api-key>',
authDomain: '<your-auth-domain>',
databaseURL: '<your-database-url>',
storageBucket: '<your-storage-bucket>'
};
firebase.initializeApp(config);
</script>
そうすることで
apiKey
は、すべての訪問者に公開されます。
とは何ですか? その鍵の目的 で、それは本当に 公開されることを意味する ?
解決方法は?
その
apiKey
は、Google サーバ上の Firebase プロジェクトを識別するだけです。誰かがこれを知っていても、セキュリティ上のリスクはありません。むしろ、Firebaseプロジェクトと対話するためには必要なことです。この同じ設定データは、Firebaseをバックエンドとして使用するすべてのiOS/Androidアプリにも含まれています。
その意味では、同じスニペットにある、プロジェクトに関連するバックエンドデータベースを特定するデータベースURLと非常によく似ています。
https://<app-id>.firebaseio.com
. なぜこれがセキュリティリスクでないのかについては、この質問を参照してください。
Firebaseのデータ修正を制限するには?
Firebase のサーバサイドセキュリティルールを使用して、許可されたユーザのみがバックエンドサービスにアクセスできるようにすることも含まれます。
Firebase のバックエンドサービスに対するすべてのデータアクセスが許可されていることを確認する方法については Firebaseセキュリティルール . これらのルールは、ファイルストレージやデータベースへのアクセスを制御し、Firebaseサーバで実施されます。ですから、それが あなたの のコード、またはあなたの設定データを使用する他の人のコードは、セキュリティルールで許可されたことしかできません。
Firebaseがこれらの値を何に使うか、またどの値を使うかについては、別の説明もあります。 できること の Firebase ドキュメントを参照してください。 APIキーの使用と管理 .
この設定データをバージョンコントロールにコミットするリスクを減らしたい場合は SDKによるFirebaseホスティングの自動設定 . キーは同じフォーマットでブラウザに表示されますが、コードにハードコードされることはもうありません。
更新情報 (2021年5月)です。という新機能のおかげで Firebaseアプリチェック Firebaseプロジェクトのバックエンドサービスへのアクセスを、そのプロジェクトに登録されているiOS、Android、Webアプリからのアクセスのみに制限することが可能になりました。
通常、上記のユーザー認証に基づくセキュリティと組み合わせて、以下のような悪用されるユーザーに対する別の盾を持つことが望ましいでしょう。 する を使用します。
App Checkとセキュリティ・ルールを組み合わせることで、不正使用に対する幅広い保護と、各ユーザーがアクセスできるデータの細かい制御の両方が可能になります。
関連
-
Vueでルートネスティングを実装する例
-
[解決済み] 配列の結合時に未定義のプロパティ 'push' を読み込むことができない
-
OSSアップロードエラーを解決する: net::ERR_SSL_PROTOCOL_ERROR
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み】JavaScript版sleep()とは?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Vue Element-uiは、アイコンを追加するためのツリーコントロールノードを詳細に実装しています。
-
jsを使った簡単な照明スイッチのコード
-
Vueはランニングライト形式のテキストを水平方向にスクロールする機能を実装している
-
JavaScriptのクロージャの説明
-
Javascript Bootstrapのグリッドシステム、ナビゲーションバー、ローテーションの説明
-
[解決済み】React - uncaught TypeError: 未定義のプロパティ 'setState' を読み取れない
-
[解決済み】Node.jsで "Cannot find module "エラーを解決するには?
-
[解決済み】(Google Map API) Geocodeは以下の理由で成功しませんでした。REQUEST_DENIED
-
[解決済み】「.addEventListener is not a function」なぜこのエラーが発生するのか?
-
Uncaught TypeError: null のプロパティ 'offsetHeight' を読み取れませんでした。