[英]How to prevent access to Firebase Realtime Database from browser console?
我有這個 JavaScript 代碼,用戶使用他們的谷歌帳戶登錄到我的應用程序。
//firebase db congifurations
const config = {
apiKey: "my_api_key",
authDomain: "my-app.firebaseapp.com",
projectId: "my-app",
databaseURL: "https://my-app.firebaseio.com",
};
//signin callback implemented using - https://developers.google.com/identity/sign-in/web/sign-in
function onSignIn(googleUser) {
var profile = googleUser.getBasicProfile();
let fullName = profile.getName().split(" ");
let userName = profile.getEmail().replace(/@.*$/, "");
if (!firebase.apps.length) {
firebase.initializeApp(config);
}
this.database = firebase.database();
let userRef = this.database.ref("users/" + userName);
userRef.set({
firstName: fullName[0],
lastName: fullName[1],
displayPicture: profile.getImageUrl(),
});
}
當我執行此代碼時,將調試器放在let userRef = this.database.ref("users/" + userName);
並嘗試在控制台上運行它:
userRef.set({
firstName: "Clutch",
lastName: "Prince",
displayPicture: "any_url_that_i_want_to_inject",
});
這個實際上被執行了,我的數據庫受到了影響。 有沒有一種安全的方法來做到這一點?
我的實時數據庫規則:
{
"rules": {
".read": true,
".write": true
}
}
Firebase 規則是最重要的部分。 除了您之外,沒有人可以編輯它們。 因此,請確保它們是安全的。 你有.write: true
意味着任何人都可以編寫你的數據庫。 為了防止這種情況發生,您應該有安全的規則。 您可以查看此鏈接以了解大多數規則組合。
查看您的問題,設置如下規則:
{
"rules": {
"Users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
確保將所有用戶數據存儲在不同的節點中。 將節點值保留為其 UID。 那么上面的規則應該很方便
現在用戶可以只編輯或閱讀他們的信息。 即使他們嘗試通過控制台對其進行編輯,至少您可以確保其他人的安全。 如果是游戲,請確保前面有 go,如果發現它們,則加罰 XD。
這仍然可以允許用戶至少編輯他們的信息,如前所述。 因此,如果您要存儲某種游戲統計信息以及玩家擁有多少資源,則需要通過執行以下操作來阻止寫訪問: ".write": false
現在這可能會讓您感到困惑,如果寫訪問被拒絕,那么玩家將如何更新他們的分數或者如何將用戶名添加到數據庫中。
為此,您需要依賴雲功能。 每當新玩家創建帳戶時,我都會運行雲 function,它會添加默認級別和其他內容。 下面是一個代碼示例:
export const onNewuserJoined = functions.auth.user().onCreate((user) => {
const newUserUID = user.uid
const newUserEmail = user.email
return Promise.all([
admin.database().ref(player_stats_path).set({ "Level": initLevel, "Cash": initCash}),
admin.database().ref(player_info_path).set({ "UID": newUserUID, "E-Mail": newUserEmail})
])
})
現在這些player_stats_path
和player_info_path
將只有讀取訪問權限,因此除了雲功能作為OVERRIDE存在的任何規則之外,沒有人可以弄亂它。 如果您需要在某人完成某項特定任務時更改他們的統計信息,您只需要通過雲功能來完成。 很高興在后端擁有所有游戲代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.