首页/安全/渗透测试与安全评估速查/批量赋值(Mass Assignment)检查
常见漏洞验证121 条

批量赋值(Mass Assignment)检查

接口把请求体字段直接映射到对象属性时可批量赋值出敏感字段(如角色、余额、审核状态);检查多余字段是否被接纳。

批量赋值是什么问题

当框架把请求体字段自动映射到对象属性时,多传的字段会被一并赋值:注册接口多传一个角色字段、订单接口多传一个金额或状态字段,都可能直接改变业务语义。这类问题的根源是「对象整体绑定」而不是逐字段白名单。检查方法是在正常请求体里追加候选敏感字段名,观察接口响应与后续查询结果是否体现改动,测试只用自有测试账号且在结束后恢复数据。

基本信息

常见场景注册、资料更新、订单创建与审核类接口
典型字段角色或权限标识、余额与额度、状态与审核标记、归属者 ID
测试方式在原请求体追加字段名,观察是否被接纳并生效
数据纪律只用测试账号;改动立即恢复并记录原始值
修复方向服务端显式白名单绑定(DTO),禁止对象整体映射

典型使用场景

  • 越权类评估的组成部分:普通用户能否提升自身权限
  • 多角色系统的权限模型评审
  • 订单与财务类接口的金额、状态字段保护核查
  • 评估框架升级后的绑定行为变化:新旧版本默认策略可能不同
  • 修复验证:确认多余字段已被忽略或返回校验错误

检查步骤

检查步骤
# 1. 抓取正常更新请求的字段结构(用测试账号)
curl -s -X PUT https://api.example.com/v1/profile \
  -H 'Authorization: Bearer <测试账号令牌>' -d '{"nickname":"t1"}'
# 2. 追加候选敏感字段,观察响应是否接纳
curl -s -X PUT https://api.example.com/v1/profile \
  -H 'Authorization: Bearer <测试账号令牌>' \
  -d '{"nickname":"t1","role":"admin","status":1,"balance":9999}'
# 3. 再次查询该账号,确认字段是否真的生效
# 4. 记录接口与字段名;把测试数据恢复到原始值

响应与判断

响应表现含义处置
字段被忽略且数据未变绑定受白名单限制记录为已核查
接口报错提示未知字段服务端校验严格记录为良好实践
数据被修改且再次查询可见批量赋值成立列缺陷,按可获得权限定级
接口返回成功但查询无变化可能存在异步处理或缓存间隔后重查再下结论
修复视角:服务端显式白名单绑定(DTO 或显式的字段赋值),禁止「对象整体映射」;不同接口的角色字段必须由服务端根据当前身份决定。
绝不能用生产账号试探角色或额度字段:一旦真的生效,会直接影响真实权限与业务数据,且难以说明改动范围。

易错点

  • 用生产账号试探角色字段:可能真的改到真实权限,影响范围难以界定
  • 只测更新接口漏掉创建接口:注册类接口的批量赋值往往危害更大
  • 改动测试数据后不恢复:会给客户留下脏数据,影响后续业务核查
  • 忽略框架默认策略变化:升级后绑定行为可能改变,需要重新验证

数据来源与参考

  • OWASP API Security Top 10(API3)
  • OWASP Cheat Sheet:Mass Assignment
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌