代码逻辑让前后端数据传输更安全(双端验证)
客户端在涉及到数据传输的前后端交互逻辑时,我以前的想法是客户端点击UI,将数据传输给服务器做处理,然后服务器将结果返回给客户端。就拿商品交易逻辑来举例:
这个逻辑有着漏洞,如果放在商业项目会导致经济损失。
步骤2中客户端将要出售的物品和拿到的价格发给服务器,这时候如果用户进行抓包,修改其中的数据(出售一件配置表中1元的物品,将数据改为1000),服务器就会将错误的数据存储起来。
同样,服务器将数据发给客户端的过程也不安全,抓包修改数据后客户端会显示错误的数据。
如何避免:
前端行为:告诉服务器出售物品(发送需要处理的商品),前端显示先从配置读一次价格显示出来 但是不会传到后端因为前端不可信所以不会把这边获得的配置内容传过去 。
后端行为:会单独的重新读配置,如果是出售购买等行为会基于收到的数据标识到对应表查相关内容然后再处理(出售行为时,如果玩家只有物品1,抓包修改成物品1,2,3,服务器读表验证玩家是否拥有这些物品)
步骤5中可以不验证的原因是就算修改了数据,客户端显示了错误的数据,在下次读表获取当前拥有的金币进行UI刷新时一样会得到正确的结果。