web漏洞-数据篡改安全问题
字数 1212 2025-08-09 13:33:35
Web漏洞之数据篡改安全问题详解
一、基本原理
1. 商品的一般购买流程
- 选择商品和数量
- 选择支付方式及配送方式
- 生成订单编号
- 订单支付选择
- 完成支付(支付宝、微信、银行卡等)
2. 常见的易篡改参数
- 商品编号ID
- 购买价格
- 购买数量
- 支付方式
- 订单号
- 支付状态
3. 常见的数据篡改方法
- 替换支付:修改支付接口或支付参数
- 重复支付:利用同一订单多次支付
- 最小额支付:将金额修改为系统允许的最小值
- 负数支付:将数量或价格改为负数
- 优惠券支付:非法修改优惠券使用条件
二、检测与危害分析
演示案例一:某商城系统商品支付购买数量、订单编号测试
1. 修改购买数量漏洞
- 登录系统后选择商品
- 设置商品交易配置与物流配送
- 选择77件商品(便于识别)
- 使用Burp Suite抓包,发现
num=77参数 - 验证
num参数确实控制购买数量 - 将
num改为负数,成功实现0元支付
2. 修改订单编号漏洞
- 完成商品购买流程至提交订单
- 抓取包含订单编号的数据包
- 将数据包发送到Repeater保存
- 重新下一个订单
- 用前一个订单编号替换新订单编号
- 成功实现低价购买高价商品(如用1000元购买价值2000元的商品)
漏洞原因:系统缺乏订单编号验证机制
3. 修改支付接口漏洞(理论说明)
- 当系统提供多种支付方式时
- 将支付接口修改为不存在的接口
- 如果系统未正确处理不存在的支付接口
- 可能导致支付被绕过而显示成功
演示案例二:某系统商品订单数量、支付价格测试
1. 修改订单数量
- 选择商品并点击立即购买
- 抓包发现
qty=1参数 - 修改为
qty=2并发送 - 成功修改商品数量
2. 修改订单价格
- 在数据包中发现价格参数
- 将价格修改为1并发送
- 成功修改订单价格
3. 商品替换攻击
- 选择两个不同价格的商品(5400元和6000元)
- 比较数据包发现
id和name参数不同 - 抓取5400元商品的数据包
- 将
id和name替换为6000元商品的对应值 - 成功用5400元购买价值6000元的商品
三、修复方案
-
数据签名验证
- 对交易金额和订单进行数字签名
- 确保数据完整性
-
数值有效性检查
- 服务端验证金额是否为正数
- 验证数量、单价等数值的合理性
-
动态密钥验证
- 支付过程中加入服务器生成的key
- 用于校验参数是否被篡改
-
安全过滤与判断
- 对金额、数量、单价、快递费等关键数值
- 进行严格的安全过滤与逻辑判断
-
数据库一致性验证
- 提交订单时后台验证单价是否与数据库记录一致
- 防止价格被篡改
-
服务端参数校验
- 严格控制用户从GET、POST、Cookies等提交的参数
- 支付加密算法应在服务端完成
- 避免直接读取客户端提供的值
-
订单编号保护
- 实现订单编号生成和验证机制
- 防止订单编号被篡改或替换
-
支付接口验证
- 严格验证支付接口的有效性
- 对不存在的支付接口进行正确处理
通过以上措施,可以有效防止数据篡改类安全漏洞,确保电子商务系统的交易安全。