行数据上加一个version版本字段,可以有效防止数据重复更新

简介: 行数据上加一个version版本字段,可以有效防止数据重复更新

有时候,可能因为编码上的一些漏洞被利用,导致代码部分的check失效,一些重复请求会同时更新一条数据,导致出现问题。在行数据上加一个 version 版本字段,可以为程序加上最后一道屏障。


原理是什么呢?


第一,更新数据之前先获取行数据的版本 version;

第二,重复请求第一次,更新行数据,version+1;

第三,重复请求第二次,判断 version ≠ version,报错。


具体的做法。


第一步,增加 version 版本字段。

image.png



第二步,更新数据之前获取版本。


long version = select version from test where id = 1;


PS:代码是模拟的。


第三步,更新数据的时候(Mybatis)增加 where 条件 version = #{version},并且更新 version 字段。


update test money=money+#{money},version=version+1 where id = 1 and version = #{version}


整体的思路非常简单,但是对数据的安全性保护却非常有效。如果没有 version 字段保护,那么当重复请求逃过代码的检查时,数据库就会更新出错。但是有了 version 字段保护后,重复数据就被拒之门外了。


防止重复数据的第一步:jQuery 禁用表单提交按钮,防止用户请求重复提交


相关文章
|
设计模式 前端开发 Java
DTO和VO的区别及使用场景详解
DTO和VO的区别及使用场景详解
7104 1
|
存储 缓存 安全
【服务器开发系列】订单号生成策略
订单是整个电子商务的核心,整个电子商务的流程也是围绕订单展开的;本文与大家分享一下各大电子商务网站订单号的生成方式。
1193 0
|
Java jenkins 持续交付
Java项目jar包启动脚本,适用jenkins或定时任务或手动执行
Java项目jar包启动脚本,适用jenkins或定时任务或手动执行
505 3
|
数据处理 Apache 流计算
实时计算引擎 Flink:从入门到深入理解
本篇详细介绍了Apache Flink实时计算引擎的基本概念和核心功能。从入门到深入,逐步介绍了Flink的数据源与接收、数据转换与计算、窗口操作以及状态管理等方面的内容,并附带代码示例进行实际操作演示。通过阅读本文,读者可以建立起对Flink实时计算引擎的全面理解,为实际项目中的实时数据处理提供了有力的指导和实践基础。
5070 2
|
SpringCloudAlibaba Java API
SpringCloud Alibaba微服务工程搭建(保姆级)
SpringCloud Alibaba微服务工程搭建(保姆级)
|
12月前
|
数据采集 人工智能 搜索推荐
|
JSON 负载均衡 Java
SpringCloud Feign 远程调用(史上最详细讲解)
SpringCloud Feign 远程调用(史上最详细讲解)
14318 0
SpringCloud Feign 远程调用(史上最详细讲解)
|
关系型数据库 MySQL 数据库
navicat 查看,设计并导出数据库 ER图
navicat 查看,设计并导出数据库 ER图
2412 5
|
Dubbo Java 应用服务中间件
Spring Boot+Nacos+gRPC,一个区别于 OpenFeign 的微服务通信方案!
Spring Boot+Nacos+gRPC,一个区别于 OpenFeign 的微服务通信方案!
1457 0
|
SQL 缓存 测试技术
一篇文章讲明白LoadRunner:参数化
一篇文章讲明白LoadRunner:参数化
704 0