[英]Firebase Security Rules: Is checking database value equally secure with checking auth?
我想知道檢查用戶的“數據庫值”(下面的示例)是否與“檢查身份驗證”(下面的示例)一樣安全、更安全或更不安全。
檢查“數據庫值”對應用程序來說是否足夠安全?
檢查數據庫值:
"root.child('account').child($uid).child('role').val() === 'admin'"
檢查授權:
"auth != null"
如果只有您或任何授權用戶可以在數據庫中編輯該角色,那么使用安全規則是安全的。 我建議在數據庫中存儲一個單獨的admins
節點並檢查該節點中的用戶 UID,以便更容易編寫安全規則來保護它。
admins
|-user1: true
|-user2: true
然后你可以編寫以下規則來檢查用戶是否是管理員:
root.child('admins').child(auth.uid).val() === true
如前所述,確保只有授權用戶才能向該節點添加新管理員。
但是,請注意實時數據庫中的數據只能在實時數據庫的安全規則中訪問。 如果您以后需要使用 Firestore 或 Storage,您將無法在其安全規則中檢查管理員。 在這種情況下,使用自定義聲明可能是更好的方法。
如果您需要檢查請求數據的用戶是否是管理員,您應該使用auth.uid
而不是$uid
。 $uid
是一個通配符,會在被訪問的路徑中占用匹配值。 使用$uid
本身聽起來並不安全,就好像我嘗試向/path/($uid=someId)
發出請求一樣,您的規則將檢查管理節點中的someId
以便用戶可以嘗試傳遞多個 ID,但不是安全的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.