【问题标题】:How do you use security rules to prevent a user from faking Firebase.ServerValue.TIMESTAMP?您如何使用安全规则来防止用户伪造 Firebase.ServerValue.TIMESTAMP?
【发布时间】:2014-10-15 11:33:09
【问题描述】:

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

【问题讨论】:

    标签: javascript firebase firebase-security


    【解决方案1】:

    您可以使用.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}
    

    【讨论】:

    • 显然,请选择一个时间间隔,伙计们......也许正负 60000 毫秒,以确保互联网连接不良的用户不会被拒绝......使用这种严格的平等将失败100% 的时间!
    猜你喜欢
    • 2019-01-10
    • 2015-10-30
    • 2012-01-21
    • 1970-01-01
    • 2010-10-08
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多