可以很容易地在客户端代码中篡改Firebase的“时间戳”值吗?

时间:2019-04-16 11:08:10

标签: firebase firebase-realtime-database

我想知道该服务器字段是否通过以下指令从服务器放置:

         result.put("timestamp", ServerValue.TIMESTAMP);

可以轻易地被篡改还是不容易被篡改,我只是不明白恶意用户可以捕获TPC / IP流量,并将ServerValue.TIMESTAMP更改为他想要的任何值。

我猜想Firebase有一些内置机制,如果以某种方式更改了数据包,它会拒绝该数据包,我猜是类似证书或类似情况的东西。

但是我想肯定地知道,我想知道是否存在某种避免这种情况的机制,这使得伪造所提到的价值比仅仅实时捕获tcp / ip流量并进行更改更加困难。

1 个答案:

答案 0 :(得分:1)

ServerValue.TIMESTAMP是一个哨兵值,作为特殊映射发送到Firebase服务器。服务器会识别此标记,并将其扩展到正确的日期/时间。由于这种扩展发生在Google的服务器上,因此恶意用户无法更改它。

恶意用户可能会拦截请求并设置一个硬编码的日期/时间,而不是哨兵值。如果要防止这种情况,可以在数据库的安全规则中通过检查属性/字段是否设置为当前服务器时间来实现。

如何执行此操作取决于您使用的数据库。

对于实时数据库:

".validate": "data.val() === now"

对于Cloud Firestore:

allow create: if request.resource.data.timestamp == request.time;