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

时间:2014-08-21 18:01:09

标签: javascript firebase firebase-security

我的应用需要可靠的时间戳值才能创建新记录。我正在使用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

1 个答案:

答案 0 :(得分:11)

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

这是执行此操作的安全规则:

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

您可以使用REST API使用这些cURL命令对其进行验证。首先是否定的案例:

$ 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}