【问题标题】:How to check for time sync in Ionic 4 app to prevent time cheat/fake by user?如何在 Ionic 4 应用程序中检查时间同步以防止用户时间作弊/伪造?
【发布时间】:2020-05-18 07:59:31
【问题描述】:

我正在使用 Angular 在 Ionic 4 中开发应用程序,并且我正在使用 Firebase 使用 AngularFire 存储和检索数据。

我的应用程序显示数据库中从当前时间开始超过两天的事件列表,并且可以选择注册事件。过去开始时间和未来开始时间(从现在起 3 天以上)的事件不会显示在应用程序中。目前,我正在使用客户端的系统时间,但问题是用户可以将设备时间更改为过去以查看过去的所有事件,并且用户可以将时间更改为未来(从现在起 3 天以上)以查看所有即将发生的事件。

我想过使用 Firebase Server Time 使用

firebase.firestore.FieldValue.serverTimestamp();

正如这里提到的How can you get the server time from Firebase。 这很耗时,因为我应该执行两个操作:写入服务器的时间戳并读取它,然后将读取的时间戳与过去时间的用户设备时间戳进行比较。而且,我无法用这种方法检查未来的时间。

还有其他方法可以防止时间作弊吗?

【问题讨论】:

    标签: angular firebase google-cloud-firestore ionic4 angularfire


    【解决方案1】:

    如果你真的想防止坏客户端访问他们不应该访问的数据,那么你需要使用security rules 来强制执行。这是让客户遵守您的规则的唯一方法。

    例如,为了防止客户端读取任何早于当前时间的文档,并且您在名为“c”的集合中的文档中将时间戳存储为名为“timestamp”的字段:

    match /c/{id} {
        allow read: if resource.data.timestamp > request.time;
    }
    

    为了满足这个查询,客户端必须只查询时间戳>firebase.firestore.FieldValue.serverTimestamp()的文档。针对集合“c”的所有其他查询都将失败并出现权限错误。

    如果没有严格的安全规则或执行您想要施加的约束的某些后端代码,您应该假设客户端可以并且将会访问数据,而不管他们的时钟或您的代码显示什么。

    【讨论】:

    • 这似乎解决了过去几天的情况,我将通过更改我的数据库规则来检查它。有什么建议可以解决未来的情况吗?
    • 您可以使用安全规则中的时间戳进行日期数学运算。有关详细信息,请参阅文档。 firebase.google.com/docs/reference/rules/rules.Timestamp
    • 上述规则解决了过去几天的情况,但现在我在为用户检索即将发生的事件时遇到了问题。查询是ref.where(`reg_users.${userid}` , '==', 'true').where('end' , '>' , Timestamp.now()),请帮我确定这个查询的规则。
    猜你喜欢
    • 2019-06-20
    • 2021-11-24
    • 1970-01-01
    • 2013-12-24
    • 2015-08-21
    • 2012-08-20
    • 1970-01-01
    • 2018-02-11
    • 2013-05-07
    相关资源
    最近更新 更多