网站首页 > 技术文章 正文
作者 | 浩说编程
来源 | 公众号:浩说编程
[ 大厂技术资源 | 研发必备安装包 | 限时免费获取 ]
在我们的日常业务开发中,和前端的数据交互是必不可少的,通常前端会将参数以json格式发送至后端进行逻辑处理,但是前端传来的数据真的可以直接拿来用吗?
本篇就针对这里的几个坑点为读者做科普和预警。
一、前端的计算结果不能直接使用
在实际业务开发中,为了提高效率经常发生的情况是:对于一些运算直接在前端处理,然后把计算的结果传给后端,这个时候可能会有读者这么做:
/**
* 订单类
*/
@RestController
@RequestMapping("/order")
public class OrderController{
@Autowired
private OrderDao;
//创建订单方法
@PostMapping("/create")
public Result createOrder(@RequestBody OrderReqVo orderReqVo){
//直接拿前端的数据存DB
OrderDao.insertOrder(orderReqVo);
}
OrderReqVo说明:
存在的问题:由于前端的开放性使得订单的总价字段有被恶意篡改的风险,如果金额被该成很低的价格,后果非常严重,之前亲身经历过由于这个问题导致的生产事故,请读者务必谨慎。
改进的思路:通过入参中的商品id查库,根据数据库返回的单价重新计算总价,并与前端传来的总价做对比,不一致则返回提示信息,一致则正常插入数据库
/**
* 订单类
*/
@RestController
@RequestMapping("/order")
public class OrderController{
@Autowired
private OrderDao orderDao;
@Autowired
private GoodsDao goodsDao;
//创建订单方法
@PostMapping("/create")
public Result createOrder(@RequestBody OrderReqVo orderReqVo){
//根据商品id查库获取商品单价
GoodsResVo goodsResVo = goodsDao.getGoodsById(orderReqVo.getGoodsId());
//计算总价
BigDecimal totalPrice = goodsResVo.getUnitPrice().multiply(new BigDecimal(orderReqVo.getGoodsNumber()));
//对比前端传来的总价
if(totalPrice.compareTo(orderReqVo.getTotalPrice()) == 0){
//即便正确也建议存后台计算的值
orderReqVo.setTotalPrice(totalPrice);
OrderDao.insertOrder(orderReqVo);
}else{
return Result.error(-1,"商品总价计算异常");
}
}
码文不易
你的关注是浩说编程持续更新的动力
浩说编程会做的更好
二、校验下拉列表选项中可能出现的非法值
在前端经常会出现下拉列表控件,其列表值通过从后端获取,用户在选择之后再传给后端:
可能的码表结构: | ||
KEY | VALUE | TYPE |
1 | 北京,Beijing | city |
2 | 上海,Shanghai | city |
3 | 南京,Nanjing | city |
...... |
对于这种情况,建议读者接到前端的选择数据后仍要校验一下数据是否是合法的,可以通过KEY校验,防止非法用户绕过浏览器页面通过工具恶意攻击。
以上就是“前端数据问题”踩过的坑以及脱坑建议,这些坑点都是真实发生过生产事故的案例,希望读者有所警觉。
作者 | 浩说编程
来源 | 公众号:浩说编程
[ 大厂技术资源 | 研发必备安装包 | 限时免费获取 ]
- 上一篇: AI时代的前端创造力:效率与想象力的平衡
- 下一篇: Web前端开发中应该遵循的15项编程原则,收藏吧
猜你喜欢
- 2025-03-06 想学编程没有电脑?手机也能编程
- 2025-03-06 Web前端开发中应该遵循的15项编程原则,收藏吧
你 发表评论:
欢迎- 最近发表
-
- Three.js vs Unity:工业可视化为何选择Web方案?
- 一款全新Redis UI可视化管理工具,支持WebUI和桌面——P3X Redis UI
- 时间线可视化实战:三款AI工具实测,手把手教你制作人生轨迹图
- 【推荐】一款可视化在线 Web 定时任务管理平台,支持秒级任务设置
- 重磅更新!FastDatasets 推出可视化 Web 界面
- 模具设计之UG钣金实例教程(3)_ug钣金基础教程
- 前端基于 RBAC 模型的权限管理实现
- 别再把JWT存在localStorage里了!2025年前端鉴权新思路
- 模具设计之曲面造型中不圆润的曲面如何处理技巧
- 9个专业级别的CSS技巧区分了解和精通的鸿沟
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- oracle面试 (55)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)