如何使用安全规则来防止用户伪造Firebase.ServerValue.TIMESTAMP

How do you use security rules to prevent a user from faking Firebase.ServerValue.TIMESTAMP?

本文关键字:伪造 用户 Firebase ServerValue TIMESTAMP 何使用 安全 规则      更新时间:2023-09-26

我的应用需要一个可靠的时间戳值来创建新记录。我使用Firebase.ServerValue.TIMESTAMP来确保这一点。下面是我的代码:

var ref = new Firebase("https://test-firebase-please-ignore.firebaseio.com/foo");
ref.set(Firebase.ServerValue.TIMESTAMP);

或在REST中:

$ curl -X PUT -d '{"foo":{".sv":"timestamp"}}' '
  https://test-firebase-please-ignore.firebaseio.com/.json 

如何防止滥用用户制作一个看起来有效的请求,但实际上是过去或未来的假时间戳?下面是他们可能使用的代码:

var ref = new Firebase("https://test-firebase-please-ignore.firebaseio.com/foo);
ref.set(1408643272324); //A timestamp in the past

您可以使用.validate规则和内置变量now来强制执行此操作。

下面是一个安全规则:

{
    "rules": {
        ".read": true,
        ".write": true,
        "foo" : {
          ".validate": "newData.val() == now"
          }
    }
}

您可以使用这些cURL命令使用REST API来验证它。首先,一个负数:

$ curl -X PUT -d '{"foo":"1408638610143"}' '
https://test-firebase-please-ignore.firebaseio.com/.json
{
  "error" : "Permission denied"
}

然后是正数:

$  curl -X PUT -d '{"foo":{".sv":"timestamp"}}' '
https://test-firebase-please-ignore.firebaseio.com/.json
{"foo":1408638609500}