2017-02-14 2 views
0

私が取り組んでいるメッセージングのiOSアプリケーションでは、今後別のユーザーにメッセージを送信できないようにしたいと考えています。過去にメッセージを作成できないFirebaseデータベースセキュリティルールを確実にする方法は?

タイムスタンプが

[".sv": "timestamp"] 

を使用してサーバー上に作成された私はちょうど私が私のデータベースルールのために今<(未満)または今< =(未満に等しい)を使用する必要があるかどうかについての説明が必要。ドキュメントにはformerと記載されていますが、メッセージのタイムスタンプは、書かれているときに分割されたミリ秒のサーバの現在の時間と等しくないでしょうか?または、タイムスタンプ値が作成され、データベースに挿入された方法を誤って解釈した場合、値が作成されると、それが挿入されるときに常に時差があります。

".validate": "newData.val() <= now"

代わりの

".validate": "newData.val() < now"

ほとんどのプログラムの機能上の(すべての場合)の影響の多くを持っていない、以来使用して直感的に

"timestamp": { ".validate": "newData.isNumber() && newData.val() < now" }, 
    "timestamp": { ".validate": "newData.isNumber() && newData.val() <= now" }, 

答えて

1

、ユーザーが数ミリ秒後に書くことが通常問題ではありません。

あなたが言及したケース(現在のサーバ時間に書かれているメッセージ)を処理するので、Firebaseで内部的にどのように動作するかにかかわらず、<=の比較はおそらく客観的には良いオプションです。

また、あなたは、このような事前日付のメッセージのための別のチェックを追加することもできます。過去に60秒以上のものを書いてからユーザーを防ぐ

".validate": "newData.val() <= now && newData.val() >= now - 60000"

を。間隔が長くなるのは、ラグやその他の異常を許容することですが、それに合わせて調整することができます。

関連する問題