javascript - library - 向公眾公開Firebase apiKey是否安全?




implementation com firebaseui firebase ui database 4.1 0 (3)

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過去用於標識後端的數據庫URL非常相似: https://<app-id>.firebaseio.com 。 有關為何這不構成安全風險的問題,請參見以下問題: 如何限制Firebase數據修改? ,包括使用Firebase的服務器端安全規則,以確保只有授權用戶才能訪問後端服務。

如果您想了解如何確保所有對Firebase後端服務的數據訪問均得到授權,請閱讀有關 Firebase安全規則 的文檔。


啟用用戶/密碼註冊後,API密鑰公開會產生漏洞。 有一個開放的API端點,該端點具有API密鑰,並允許任何人創建新的用戶帳戶。 然後,他們可以使用此新帳戶登錄到受Firebase Auth保護的應用,或使用SDK進行用戶/通過身份驗證並運行查詢。

我已將此報告給Google,但他們說它正在按預期工作。

如果無法禁用用戶/密碼帳戶,則應執行以下操作:創建雲功能以自動禁用onCreate上的新用戶,並創建一個新的數據庫條目來管理其訪問權限。

例如:MyUsers / {userId} /訪問權限:0

 exports.addUser = functions.auth.user().onCreate(onAddUser); exports.deleteUser = functions.auth.user().onDelete(onDeleteUser); 

更新您的規則,以僅允許具有訪問權限> 1的用戶讀取。

偶然的情況下,偵聽器功能無法足夠快地禁用帳戶,然後讀取規則將阻止它們讀取任何數據。


我不相信將安全性/配置密鑰公開給客戶端。 我不會將其稱為安全的原因,不是因為有人可以從第一天起就竊取所有私人信息,因為有人會提出過多要求,耗盡您的配額,並使您欠Google很多錢。

您需要考慮許多概念,包括限制人們不要訪問不應在的地方,DOS攻擊等。

我更希望客戶端首先連接到您的Web服務器,在那裡您將第一手防火牆,驗證碼,cloudflare,自定義安全性放在客戶端和服務器之間,或者服務器和firebase之間,您可以使用。 至少您可以先停止可疑活動,直到其到達火力基地。 您將擁有更大的靈活性。

我只看到一種很好的使用場景,可以將基於客戶端的配置用於內部使用。 例如,您有內部域,並且您可以肯定外部人無法訪問該域,因此可以設置瀏覽器-> firebase類型之類的環境。







firebase