簡體   English   中英

Firebase 使用 Socket.IO 從客戶端安全地向服務器發送請求?

[英]Firebase Sending Request to Server from Client Safe Using Socket.IO?

我了解安全規則是保護數據的最安全方法,但它不支持我在用戶單擊特定元素時存儲用戶數據的方法。 這是因為如果我將 write == true 設為 true,他們就可以自願更改數據庫,而我不希望他們這樣做; 我只是想私下記錄他們從我的網站上輸入的內容。

因此,我的解決方案是在服務器上創建另一個數據庫。 在 server.js 文件中初始化 firebase 實時數據庫。 我認為這將是理想的,因為客戶端無法訪問任何憑據(是的,我知道,即使用戶確實擁有它,它也不是那么糟糕,但以防萬一)。

因此,如果我要使用 socket.io 向客戶端請求(他們看到的只是“socket.emit('value', 'value'))那么這不是安全的,因為他們沒有看到與 firebase 數據庫相關的任何內容它都在服務器上(不向用戶顯示)?

我只想澄清這是否安全和理想,因為如果我忽略安全規則,它似乎在邏輯上有效。

向在我之前的帖子中回復的之前的用戶道歉,這可能非常相似,但我已經詳細說明了一點,以使我正在做的事情更清楚一點。

感謝你的幫助。

客戶代碼:

 var a = 0; socket.emit('value', a);

服務器代碼:

 firebase.initializeApp({ apiKey: VALUE, authDomain: VALUE, databaseURL: VALUE, projectId: VALUE, storageBucket: VALUE, messagingSenderId: VALUE, appId: VALUE, measurementId: VALUE }); socket.on('value', function(data) { var ref = firebase.database().ref('node'); ref.set(data); })

您共享的代碼確實似乎(與您的第一個問題不同)不再向調用者公開您的 Firebase 項目的身份。 因此,調用者無法從您共享的內容中確定數據庫 URL。

這是否足以滿足您的需求,只有您可以確定。 但有幾點要記住:

  • 如果用戶可以通過另一種方式找到數據庫 URL,那么您的".read": true, ".write": true規則仍然允許他們讀取所有數據並寫入任何他們想要的內容。
  • 您的代碼允許將用戶想要的任何內容寫入數據庫。 您需要在代碼中或使用 Firebase 的服務器端安全規則將其鎖定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM