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