javascript - 在客户端比较订阅到期日期和当前日期是否安全?或者这可以被操纵吗?
问题描述
我从后端获取了一些数据,这些数据告诉我用户订阅的到期日期。如果这个日期是过去的,我将用户导航到其他地方,所以她无法登录:
if (expirationDate.getTime() < new Date().getTime()) {
navigate('/subscription-expired')
}
我想知道在客户端进行这样的比较检查是否安全?这可以被操纵吗?
解决方案
在客户端检查数据、验证数据和其他内容的好处是:
- 提醒普通用户他/她不是在一个好的路径(用户通知她的订阅到期)。(结果:用户体验)
- 减少服务器负载。当阻止普通用户向服务器发送无效数据时。(普通用户在发现订阅过期时不会向服务器发送额外的数据)(结果:资源节省和性能)
但是在服务器端检查是一项义务,因为有非常规用户(修改 Js、使用 Postman、机器人、入侵者发布数据)可能会在没有干预的情况下发送 Http 请求,并且验证您的客户端代码可能会滥用您的系统.
客户端是敌人的战场
总结一下:
您必须在服务器端验证数据以防止任何滥用。
但它也建议在客户端 验证数据以提高整个系统的性能。
例如在你的情况下:
在服务器端:
- 检查过期时间=>
- 如果它已过期 =>
- 返回 403 错误:
{message:"expired"}
在客户端:
- 如果出现 403 错误
{message:"expired"}
。=> - 重定向用户。
- 如果出现 403 错误
推荐阅读
- javascript - 防止在 href="#" 链接中滚动到顶部
- python - 为另一个日期框列中的每个日期在熊猫数据框中添加一行
- typescript - 导入类型之间的区别
- sql - 我正在尝试对多个条件进行计数并将它们作为单独的列返回
- php - 循环槽并修改 JSON 响应
- node.js - 带有 NEST.JS 的 newrelic/apollo-server-plugin
- c# - 在文本更改 c# 上创建首字母缩写词
- css - 如何使用 flex 而不是 height: 100%?
- google-sheets - Google Sheet 根据日期对数字进行求和和乘法
- flutter - 在 appbar 操作中的图标按钮下方添加文本?