2017-01-29 62 views
1

我已通過身份驗證的用戶,並希望能夠保護自己免受垃圾郵件讀取特定參考(從而增加成本)的用戶,您如何做到這一點?我在這裏看到了一個問題:Firebase限速讀取安全規則

Firebase rate limiting in security rules?

即通過包括限速寫道:

「關鍵是要保持的最後一次用戶發佈一個 消息的審計」 - 加藤

有沒有一種方法可以確定用戶上次讀取的時間,然後將他們的下一次讀取限制在上次讀取的某個時間間隔?可能更好的辦法是限制某個時間段內的讀取數量(比如每小時讀取n次)?

感謝

+1

由於安全規則中沒有最後讀取時間[預定義變量](https://firebase.google.com/docs/database/security),我無法看到通過安全規則如何實現這一點。 /固定數據#predefined_variables)。 – cartant

+0

Firebase是否有一些固有的速率限制? – shell

+0

不是我所知道的,但那不算太多。看看是否有某種限制方法會很有趣。 – cartant

回答

0

如何:

的結構:

posts 
    post_id_0 
    msg: "a post about posting" 
    post_id_1 
    msg: "a post about pizza" 

和用戶節點

users 
    uid_0 
    name: "biff" 
    post_activity 
     post_id_0 
      last_activity: "20170128100200" 

僞代碼,因爲我們不知道該平臺

顯示器職位表中的

a post about posting 
    a post about pizza 

用戶敲擊或點擊「後約發佈」在代碼 一個列表,獲得最後的活動,今天這是在上午10:02

lastActivity = uid_0/post_activity/post_id_0/last_activity 

並且然後與當前時間的最後一項活動,如果它已經訪問不到一分鐘前,不允許他們再次

let currentTimestamp = current time (say it's 10:04 am) 
if currentTimestamp - lastActivity > 1 minute then 
    show post details 
    update the lastActivity node to current timestamp 
else 
    print("Posts can only be reviewed every minute") 

讀它在這種情況下,最後一次後W¯¯如2分鐘前閱讀,所以允許再次閱讀。如果不到一分鐘,它將被拒絕。另外,如果用戶點擊/點擊post_id_1,則不會發現發佈活動,這意味着用戶以前從未查看過該活動;在這種情況下,將其添加到uid_0/post_activity節點。

相同的技術可以與計數器一起使用,而不是限制用戶閱讀帖子的次數。

+0

嗨Jay感謝您的幫助。我的問題是沒有任何東西阻止惡意用戶更新一次時間戳,然後再也不會更新它,這會使用戶在第一次更新後2分鐘內自由閱讀垃圾郵件。也許我錯了(我希望如此)? – shell

+0

@shell惡意用戶無法通過設置適當的規則對節點進行寫入訪問。此外,您還可以將規則與上次活動與當前時間進行比較。如果任何人都可以隨時向節點寫信,那麼Firebase根本就沒有安全保護,對吧?這是一個開始,這將需要改進,但它確實有效。 – Jay