firebaseウェブアプリガイド は、firebaseを初期化するために、与えられたapiKeyを私のHTMLに入れるべきだと述べています。
// 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がバックエンドを識別するために歴史的に使用されてきたデータベースのURLと非常によく似ています:https://<app-id>.firebaseio.com
。なぜこれがセキュリティ上のリスクとならないかについては、次の質問を参照してください。 Firebaseのデータ変更を制限する方法 、許可されたユーザーのみがバックエンドサービスにアクセスできるようにするためのFirebaseのサーバー側セキュリティルールの使用を含む。
PrufrofroとFrank van Puffelenの答えを基にして ここ この解決策をまとめると、スクレイピングを防ぐことはできませんが、APIキーを使用するのが難しくなります。
警告:この方法でもデータを取得するには、たとえばChromeでJSコンソールを開いて次のように入力します。
firebase.database().ref("/get/all/the/data").once("value", function (data) {
console.log(data.val());
});
データベースセキュリティルールのみがデータを保護できます。
それにもかかわらず、私は本番APIキーの使用をこのように私のドメイン名に制限しました:
projectname.firebaseapp.com/*
)今すぐアプリはこのドメイン名でのみ動作します。それで私はlocalhost開発のために秘密になるであろう別のAPIキーを作成しました。
これは制限されていませんので、必ず非公開にしてください。
Webpackを使って本番用アプリを作成します。この新しい無制限のAPIキーを誤って公開しないようにするために、通常のAPIキーと同じようにそれをindex.html
の中に入れます。それから、webpack.production.config.js
ファイルの中で、index.html
がプロダクションビルドにコピーされるたびにキーを置き換えます。
plugins: [
new CopyWebpackPlugin([
{
transform: function(content, path) {
return content.toString().replace("###dev-key###", "###public-key###");
},
from: './index.html'
}
])
]
Emmanuel Camposが述べたように、デフォルトでは Firebaseのみがホワイトリストlocalhost
とあなたのFirebaseホスティングドメイン 。
私はsecurity/configキーをクライアントに公開することを確信していません。誰かが過度の要求をし、あなたのクォータを流出させ、あなたにグーグルに大金を借りさせることができるので、私はそれを安全とは呼びません。
あなたは、人々が彼らがそうであるべきではないと思われるところにアクセスしないように制限することから多くの概念について考える必要があります、DOS攻撃など。
クライアントが最初にあなたのWebサーバーにぶつかるのであれば、クライアントとサーバーの間、あるいはサーバーとfirebaseの間にファイアウォール、キャプチャ、クラウドフレア、カスタムセキュリティを直接置くことになるでしょう。少なくとも、あなたが最初に疑わしい活動を停止してからFirebaseに到達することができます。もっと柔軟性があります。
内部使用のためにクライアントベースの設定を使用するための良い使用法シナリオは1つしかありません。たとえば、内部ドメインがあり、部外者がそこにアクセスできないと確信しているので、ブラウザ - > firebaseタイプのような環境を設定できます。