当前位置: 首页 > news >正文

Web安全 - API 成批分配漏洞的四种修复方案

文章目录

  • 概述
  • 危害
  • 修复建议与实施方案
    • 解决方案 1:手动绑定数据
    • 解决方案 2:使用 DTO 进行数据过滤
    • 解决方案 3:启用字段白名单
    • 解决方案 4:验证输入数据模式
  • 验证修复有效性
  • 小结

在这里插入图片描述


概述

在这里插入图片描述

批量分配漏洞(Mass Assignment)通常发生在后端代码使用自动数据绑定框架(如 Java 的 SpringMVC 或其他 ORM 工具)时,没有对用户输入数据进行严格验证和过滤。

例如前端用户可以通过提交额外的参数(如权限字段、敏感标志字段)绕过后端验证,将这些敏感字段意外绑定到对象中并持久化。


危害

  • 特权升级:恶意用户可以通过添加权限字段获取更高的系统权限。
  • 数据篡改:恶意篡改业务关键字段或数据,例如篡改订单状态、支付金额。
  • 绕过安全机制:可以破坏访问控制策略,导致未经授权的数据泄漏或修改。

修复建议与实施方案

解决方案 1:手动绑定数据

避免直接使用框架的自动绑定功能,改为手动提取输入参数并明确赋值。例如:

@RestController
public class RuleController {@PostMapping("/ruleCompletion")public ResponseEntity<?> ruleCompletion(@RequestBody Map<String, Object> payload) {Rule rule = new Rule();rule.setName((String) payload.get("name"));rule.setDescription((String) payload.get("description"));// 仅绑定允许的字段return ResponseEntity.ok(service.saveRule(rule));}
}

解决方案 2:使用 DTO 进行数据过滤

通过定义 DTO(数据传输对象)仅包含允许的字段,将用户输入限制为安全范围内的数据。

@Data
public class RuleDTO {private String name;private String description;
}@RestController
public class RuleController {@PostMapping("/ruleCompletion")public ResponseEntity<?> ruleCompletion(@RequestBody RuleDTO ruleDTO) {Rule rule = new Rule();BeanUtils.copyProperties(ruleDTO, rule); // 将 DTO 数据复制到实体中return ResponseEntity.ok(service.saveRule(rule));}
}

解决方案 3:启用字段白名单

对于常见 ORM(如 Hibernate)绑定,可以启用字段白名单,指定哪些字段可以被更新:

@Entity
public class Rule {@Column(updatable = false)private Long id; // 禁止外部更新private String name;@Column(updatable = false)private String sensitiveField; // 禁止外部更新的敏感字段
}

解决方案 4:验证输入数据模式

结合 JSON Schema 或其他验证框架,严格定义输入数据结构。

@Component
public class RuleValidator {public void validate(RuleDTO ruleDTO) {if (StringUtils.isEmpty(ruleDTO.getName())) {throw new IllegalArgumentException("Name cannot be empty");}// 其他自定义验证规则}
}

验证修复有效性

确保修复后,以下输入无法篡改敏感数据:

  • 测试 1:尝试注入非预期字段(如 admin=true)。
  • 测试 2:尝试修改受保护字段(如 id)。
  • 测试 3:验证业务逻辑中绑定的字段是否均在允许范围内。
@Test
public void testMassAssignmentPrevention() {MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new RuleController()).build();String maliciousPayload = "{\"name\":\"test\",\"admin\":\"true\"}";mockMvc.perform(post("/ruleCompletion").contentType(MediaType.APPLICATION_JSON).content(maliciousPayload)).andExpect(status().isBadRequest());
}

小结

四种修复方法,包括手动绑定、DTO 使用、字段白名单和数据模式验证。

在这里插入图片描述

http://www.lryc.cn/news/512046.html

相关文章:

  • 计算机网络实验室建设方案
  • ubuntu20.04 调试bcache源码
  • xss csrf怎么预防?
  • near-synonym反义词生成(2):Prompt +Bert-MLM(FT)
  • 【服务器项目部署】⭐️将本地项目部署到服务器!
  • Neo4j Desktop无法打开
  • 【编程语言】Kotlin快速入门 - 泛型
  • 【PostgreSQL】入门篇——在不同操作系统上安装 PostgreSQL
  • 【Docker】部署MySQL容器
  • mysql9.0windows安装
  • word中文献引用[]符号的上下标格式修改
  • 计算机毕设-基于springboot的游戏创意工坊与推广平台的设计与实现(附源码+lw+ppt+开题报告)
  • kafka的备份策略:从备份到恢复
  • 【畅购商城】微信支付之支付回调和支付状态
  • 【Compose multiplatform教程18】多平台资源的设置和配置
  • MT6765核心板_MTK6765安卓核心板规格参数_联发科MTK模块开发
  • conda常用维护命令
  • Html——10 关键字和描述
  • Mysql(MGR)和ProxySQL搭建部署-Docker版本
  • QML学习(一) Qt Quick和QML介绍以及适用场景说明
  • 深入理解 PyTorch 的 view() 函数:以多头注意力机制(Multi-Head Attention)为例 (中英双语)
  • 使用PHP函数 “setcookie“ 设置cookie
  • redis优化
  • 数据分析的革命——解读云数据库 SelectDB 版的力量
  • Ngnix介绍、安装、实战及用法!!!
  • 算法基础一:冒泡排序
  • 云开发实战教程:手把手教你高效开发应用
  • Git基本操作快速入门(30min)
  • VS Code AI开发之Copilot配置和使用详解
  • QT中使用OpenGL function