首页 > 解决方案 > 在客户端比较订阅到期日期和当前日期是否安全?或者这可以被操纵吗?

问题描述

我从后端获取了一些数据,这些数据告诉我用户订阅的到期日期。如果这个日期是过去的,我将用户导航到其他地方,所以她无法登录:

  if (expirationDate.getTime() < new Date().getTime()) {
      navigate('/subscription-expired')
  }

我想知道在客户端进行这样的比较检查是否安全?这可以被操纵吗?

标签: javascriptnode.jsdatetimewebsecuritysecure-coding

解决方案


在客户端检查数据、验证数据和其他内容的好处是:

  • 提醒普通用户他/她不是在一个好的路径(用户通知她的订阅到期)。(结果:用户体验)
  • 减少服务器负载。当阻止普通用户向服务器发送无效数据时。(普通用户在发现订阅过期时不会向服务器发送额外的数据)(结果:资源节省和性能)

但是在服务器端检查是一项义务,因为有非常规用户(修改 Js、使用 Postman、机器人、入侵者发布数据)可能会在没有干预的情况下发送 Http 请求,并且验证您的客户端代码可能会滥用您的系统.

客户端是敌人的战场

总结一下:

必须在服务器端验证数据以防止任何滥用。

但它也建议客户端 验证数据以提高整个系统的性能。

例如在你的情况下:

  • 在服务器端:

    • 检查过期时间=>
    • 如果它已过期 =>
    • 返回 403 错误:{message:"expired"}
  • 在客户端:

    • 如果出现 403 错误{message:"expired"}。=>
    • 重定向用户。

推荐阅读