网站首页 > 技术文章 正文
作者 | 浩说编程
来源 | 公众号:浩说编程
[ 大厂技术资源 | 研发必备安装包 | 限时免费获取 ]
在我们的日常业务开发中,和前端的数据交互是必不可少的,通常前端会将参数以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项编程原则,收藏吧
你 发表评论:
欢迎- 620℃几个Oracle空值处理函数 oracle处理null值的函数
- 612℃Oracle分析函数之Lag和Lead()使用
- 601℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 597℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 593℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 585℃【数据统计分析】详解Oracle分组函数之CUBE
- 574℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 563℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)