iT邦幫忙

0

請問 Firebase 網路 API 金鑰的用途是甚麼?

最近使用 Firebase 的 Firestore 開發專案時,發現網路 API 金鑰是允許在 Client 端公開的。
然後參考了這篇 Is it safe to expose Firebase apiKey to the public? 的回答,其中提到

The apiKey in this configuration snippet just identifies your Firebase project on the Google servers. It is not a security risk for someone to know it.

  1. 為何 identifies 專案需要 apiKey ,而不是專案 ID 就足夠?

  2. 為何公開 API 金鑰不會造成資安風險?

總覺得 Key 這種東西就是因該是私密的,而不是公開的

1
raytracy
iT邦大神 1 級 ‧ 2021-07-24 15:14:58
最佳解答

Firebase 官網很明確的載明: 他的 API Key 跟傳統認知的 API Key 不同;
他的 API Key 不是用來做存取控制的, 即使被放在程式內被公開也沒關係:
https://firebase.google.com/docs/projects/api-keys?hl=en

既然他的 API Key 不是用來做權限或者存取控制, 您就不需要一直糾結在: 要如何保護 AKI Key? 這件事情上面了, 官網都說他是可被公開的資訊, 當然就不要你費心去保護他.

說到底, API Key 僅僅只是用來識別用戶與 Project 關係的識別碼.

現在應該要關心的應該是:
如果不是靠 API Key, 那麼 Firebase 是用甚麼方法來保護使用者資料?

答案在 2018 年的鐵人賽文章裡:
https://ithelp.ithome.com.tw/articles/10206354

當然, 這並不是說公開 AKI Key = 零風險, 要提醒: AKI Key 的風險是控制在你自己手上, 如果你把 Firebase Project 裡面的規則設定成這樣:

Rule 設定成這樣, 神仙也救不了你, 因為所有資料都變公開的!!
但這是你自己設定的, 所以不干 Firebase 的事, 責任不在他...

反觀, 別的作者花多少心思編制 Rule 來保護他的使用者資料:

出處: https://firebase.googleblog.com/2019/03/firebase-security-rules-admin-sdk-tips.html

不夠你用? 這裡還有一些更複雜的情境範例:
https://howtofirebase.com/firebase-security-rules-88d94606ce4a
(再來, 就要靠你自己的想像力, 去編製更安全的 Rule 了...)

以上設定有沒有用到 API Key? 完全沒有!
所以 Firebase 的安全, 跟 API Key 無關...

wrxue iT邦研究生 3 級 ‧ 2021-07-24 15:56:14 檢舉

感謝大師清楚明瞭的解說!

0
黃彥儒
iT邦高手 1 級 ‧ 2021-07-24 01:12:26

為何 identifies 專案需要 apiKey ,而不是專案 ID 就足夠?

你用專案ID,阿如果想要廢棄某個客戶端不就整個專案打掉?而且就算被知道了,網址不對、簽章不對還不是不能用?

為何公開 API 金鑰不會造成資安風險?

為什麼會?你知道了又能奈我何?

總覺得 Key 這種東西就是因該是私密的,而不是公開的

那你一定沒聽說過公鑰

所以結論是,這個Key只是一個識別項,用來讓Google維護客戶端到專案的多對一關連,而這個關連是可以被管理的。

wrxue iT邦研究生 3 級 ‧ 2021-07-24 09:10:17 檢舉

你用專案ID,阿如果想要廢棄某個客戶端不就整個專案打掉?

請問這個是否能再詳細解釋廢棄客戶端的意思?與專案打掉的關聯?

而且就算被知道了,網址不對、簽章不對還不是不能用?

我在設定 firebase 的時候好像也沒有設定到簽章的部分,至於您說的網址是來源網址嗎?我也沒設定到,是否也能更詳細說明?

為什麼會?你知道了又能奈我何?

整個存取 firestore 程式碼都放在 client 端,若直接複製整個程式碼狂重新執行,那應該也會造成流量暴增與修改到數據

那你一定沒聽說過公鑰

所以這裡的 apiKey 是公鑰嗎?我印象中的 apiKey 通常是用來當作存取 api 的權限判斷,藉以計算流量帳單。而這裡的 API 金鑰看起來用途不同。

所以結論是,這個Key只是一個識別項,用來讓Google維護客戶端到專案的多對一關連,而這個關連是可以被管理的。

請問這裡提到的管理是怎樣的管理呢?

0
nnwa1680
iT邦新手 5 級 ‧ 2021-07-30 00:56:47

回覆一下網址的部分,到firebase 控制台的專案設定 -> 服務帳戶 -> 點選右上角的管理服務帳戶權限,應該會被帶到 GCP 的控制台。

然後到左上角展開選單 -> 選擇 API 和服務,進去之後可以設定 apiKey 可以存取的 API 以及允許的來源 URL 。

關於被瘋狂執行,就算 key 存在後端拿不到,還是有可能會被瘋狂重複執行吧。

以上是小弟剛好最近也在用 firebase 建立專案的小見解。

我要發表回答

立即登入回答