localStorage数据是否需要加密?客户端JS实现购物车系统如何保障安全?
客户端JS实现加购系统的安全性分析与优化方案
方案安全性判断
这种纯客户端JavaScript实现加购逻辑的方案完全不安全,核心风险点如下:
- 客户端所有数据无可信性:浏览器端运行的JS代码、
localStorage存储的内容都可以通过开发者工具直接查看、修改、删除,用户可以随意篡改加购商品的价格、数量、规格等信息,若后续订单生成逻辑没有服务端校验,会直接造成平台资损。 - 业务规则可被完全绕过:纯客户端实现的限购、库存校验、优惠叠加规则等约束逻辑,都可以通过篡改代码、伪造请求的方式绕过,完全起不到业务管控作用。
localStorage本身无原生安全防护:它采用明文存储的机制,同设备的其他使用人员、恶意浏览器插件都可以直接读取其中存储的所有内容,会导致用户加购的隐私商品信息泄露。
保障localStorage数据安全的可行措施
- 核心逻辑全部迁移到服务端:加购校验、价格计算、库存扣减、订单生成这类核心业务逻辑绝对不能放在客户端实现,你可以选择PHP或者任意其他服务端语言实现,客户端仅负责发起加购请求、展示服务端返回的结果,所有加购数据最终以服务端存储的内容为准。
- 敏感数据禁止存入
localStorage:不要将用户ID、商品结算价、用户联系方式这类敏感信息存储到localStorage中,仅可在其中存储非敏感的展示类字段,核心加购数据每次打开页面时从服务端实时拉取。 - 存储前对数据做加密验签处理:如果确实需要在
localStorage中存储部分加购数据,要先对数据做对称加密,加密密钥不要硬编码在前端JS代码中,可以从服务端动态获取单次有效的密钥;同时给数据添加签名校验,读取数据时先验证签名,一旦发现数据被篡改直接清空失效。 - 给存储数据添加有效期:给
localStorage中的加购数据设置合理的过期时间,定期清理过期数据,降低数据泄露或者被篡改后的可利用时长。 - 提交订单前做二次校验:用户发起订单结算请求时,服务端必须再次核对加购的商品ID、价格、数量、库存是否与当前最新的服务端数据一致,一旦数据不一致直接返回错误,禁止生成订单。
内容的提问来源于stack exchange,提问作者Eeshaan Gupta
相关产品推荐
相关产品推荐

