3 回答
TA贡献1784条经验 获得超8个赞
在客户端检查数据、验证数据和其他内容的好处是:
提醒普通用户他/她的状态不佳(用户被告知其订阅到期)。(结果:用户体验)
减少服务器负载。当防止普通用户向服务器发送无效数据时。(普通用户在发现订阅已过期时不会向服务器发送额外的数据)(结果:资源节省和性能)
但检查服务器端是一项义务,因为有非常规用户(修改 Js、使用 Postman、机器人、入侵者发布数据)可能会在不干预的情况下发送 Http 请求,并且验证客户端代码可能会滥用您的系统。
客户端是敌人的战场
总结一下:
您必须在服务器端验证数据以防止任何滥用。
但建议也在客户端 验证数据,以提高整个系统的性能。
例如在你的情况下:
在服务器端:
检查过期时间=>
如果已经过期=>
返回 403 错误:
{message:"expired"}
在客户端:
如果出现 403 错误
{message:"expired"}
。=>重定向用户。
TA贡献1772条经验 获得超8个赞
你永远不应该相信客户端的任何东西。
最重要的是,服务器时间和客户端时间可能不同。
那么问题来了,你的订阅开始时间是基于客户端时间还是服务器时间?(这应该是服务器时间,因为我们不应该信任客户端)
最安全的方法是让您的服务器返回订阅是否有效(即 true/false);
如果为 false,则导航('/subscription-expired')
最重要的是,每个页面都应该包含相同的支票。
TA贡献1829条经验 获得超4个赞
您的用户是否可以操纵 JavaScript 代码,或者只是在计算机上设置了错误的日期和时间?当然可以。会有那么关键吗?在您的情况下,您只想将用户重定向到另一个页面,因此这并不重要,但它会影响对您的应用程序的信任,因为在某些情况下它会以意想不到的方式运行,并在以下情况下说订阅已过期它不是(或者说它没有过期)。
如果您的后端信任客户端提供当前日期而不进行验证,那么这可能会更加重要,因为您的数据可能会被伪造,并且您的业务规则可能会被绕过。
这取决于用例,但一般来说,您不应将new Date()
浏览器视为事实来源。你的后端仍然是真相的持有者。
添加回答
举报