我想知道该服务器字段是否通过以下指令从服务器放置:
result.put("timestamp", ServerValue.TIMESTAMP);
可以轻易地被篡改还是不容易被篡改,我只是不明白恶意用户可以捕获TPC / IP流量,并将ServerValue.TIMESTAMP更改为他想要的任何值。
我猜想Firebase有一些内置机制,如果以某种方式更改了数据包,它会拒绝该数据包,我猜是类似证书或类似情况的东西。
但是我想肯定地知道,我想知道是否存在某种避免这种情况的机制,这使得伪造所提到的价值比仅仅实时捕获tcp / ip流量并进行更改更加困难。
答案 0 :(得分:1)
ServerValue.TIMESTAMP
是一个哨兵值,作为特殊映射发送到Firebase服务器。服务器会识别此标记,并将其扩展到正确的日期/时间。由于这种扩展发生在Google的服务器上,因此恶意用户无法更改它。
恶意用户可能会拦截请求并设置一个硬编码的日期/时间,而不是哨兵值。如果要防止这种情况,可以在数据库的安全规则中通过检查属性/字段是否设置为当前服务器时间来实现。
如何执行此操作取决于您使用的数据库。
对于实时数据库:
".validate": "data.val() === now"
对于Cloud Firestore:
allow create: if request.resource.data.timestamp == request.time;