当前位置: 首页 > 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 使用、字段白名单和数据模式验证。

在这里插入图片描述

相关文章:

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

文章目录 概述危害修复建议与实施方案解决方案 1&#xff1a;手动绑定数据解决方案 2&#xff1a;使用 DTO 进行数据过滤解决方案 3&#xff1a;启用字段白名单解决方案 4&#xff1a;验证输入数据模式 验证修复有效性小结 概述 批量分配漏洞&#xff08;Mass Assignment&#…...

计算机网络实验室建设方案

一、计算机网络实验室拓扑结构 计算机网络综合实验室解决方案&#xff0c;是面向高校网络相关专业开展教学实训的综合实训基地解决方案。教学实训系统采用 B&#xff0f;S架构&#xff0c;通过公有云教学实训平台在线学习模式&#xff0c;轻松实现网络系统建设与运维技术的教学…...

ubuntu20.04 调试bcache源码

搭建单步调试bcache的环境&#xff0c;/dev/sdb作为backing dev&#xff0c; /dev/sdc作为cache dev。 一、宿主机环境 1&#xff09;安装ubuntu 20.04 &#xff1a; 参考ubuntu20.04 搭建kernel调试环境第一篇--安装系统_ubuntu kernel-CSDN博客安装&#xff0c;其中的第六…...

xss csrf怎么预防?

一、XSS&#xff08;跨站脚本攻击&#xff09;预防 XSS 是指攻击者向目标网站注入恶意脚本&#xff0c;从而在用户浏览器中执行。 1. 输入过滤 清理用户输入&#xff1a; 拦截或清理HTML特殊字符&#xff08;如 <, >, , ", &&#xff09;。使用安全库&#x…...

near-synonym反义词生成(2):Prompt +Bert-MLM(FT)

near-synonym之反义词生成方法二 near-synonym, 中文反义词/近义词/同义词(antonym/synonym)工具包. 方法一为(neg_antonym): Word2vec -> ANN -> NLI -> Length 方法二为(mlm_antonym): Prompt Bert-MLM(FT) Beam-Search 项目地址 github: https://github.com/yon…...

【服务器项目部署】⭐️将本地项目部署到服务器!

目录 &#x1f378;前言 &#x1f37b;一、服务器选择 &#x1f379; 二、服务器环境部署 2.1 java 环境部署 2.2 mysql 环境部署 &#x1f378;三、项目部署 3.1 静态页面调整 3.2 服务器端口开放 3.3 项目部署 ​ &#x1f379;四、测试 &#x1f378;前言 小伙伴们大家好…...

Neo4j Desktop无法打开

解决方案——断网 9号——周一早上就开始打不开&#xff0c;后面去他官网找解决方案&#xff0c;看他们老外解决方法都是重新安装&#xff0c;但是都没彻底解决&#xff0c;我试着重新下载安装桌面版&#xff1a;1.6.1版本&#xff0c;9号晚上7.30的时候经过两次重新安装可以打…...

【编程语言】Kotlin快速入门 - 泛型

Kotlin的泛型与Java十分类似&#xff0c;也是使用这种的语法结构&#xff1a; class Fruit<T> {fun eat(f : T): Unit {println("eat...")}fun <T> buy(p : T): T {return p} }泛型限制 和Java一样&#xff0c;Kotlin也允许泛型是某个类的子类 fun &l…...

【PostgreSQL】入门篇——在不同操作系统上安装 PostgreSQL

PostgreSQL在 Windows、macOS 和 Linux&#xff08;以 Ubuntu 为例&#xff09;的安装步骤&#xff0c;以及可能出现的问题和解决办法。 一、在 Windows 上安装 PostgreSQL 1. 下载 PostgreSQL 安装程序 访问 PostgreSQL 官方网站&#xff1a;PostgreSQL Downloads点击“Dow…...

【Docker】部署MySQL容器

关于docker&#xff0c;Windows上使用Powershell/CMD执行指令&#xff0c;Linux系统直接使用终端执行指令。 拉取MySQL 也可以跳过拉取步骤&#xff0c;直接run&#xff0c;这样本地容器不存在的话&#xff0c;会自动拉取最新/指定的版本。 # 默认拉取最新版本 docker pull …...

mysql9.0windows安装

第一步下载 官网地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 点击后&#xff0c;选择不登录下载 第二步安装 双击下载的msi文件进行安装。打开后页面如下&#xff0c;选择安装类型&#xff0c;选择自定义安装。点击Next下一步。 自行选择安装目录 选好后点击…...

word中文献引用[]符号的上下标格式修改

word中文献引用[]符号的上下标格式修改 百度网址 1、查找打开使用通配符&#xff0c;输入[[][0-9]{1,2}[]]&#xff0c;即可匹配所有的字[1],[12]这些字符&#xff0c;然后鼠标点击替换为的空白处&#xff0c;再点击特殊格式–>“字体”&#xff0c;选中上标&#xff0c;最…...

计算机毕设-基于springboot的游戏创意工坊与推广平台的设计与实现(附源码+lw+ppt+开题报告)

博主介绍&#xff1a;✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围&#xff1a;Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…...

kafka的备份策略:从备份到恢复

文章目录 一、全量备份二、增量备份三、全量恢复四、增量恢复 前言&#xff1a;Kafka的备份的单元是partition&#xff0c;也就是每个partition都都会有leader partiton和follow partiton。其中leader partition是用来进行和producer进行写交互&#xff0c;follow从leader副本进…...

【畅购商城】微信支付之支付回调和支付状态

目录 Nuxt.js IP 启动 支付回调 回调接口 后端实现 查看支付状态 后端实现 前端实现 ​​​​​​​前置技术&#xff1a;RabbitMQ ​​​​​​​更新订单状态 ​​​​​​​Nuxt.js IP 启动 "config": {"nuxt": {"host": "0.0…...

【Compose multiplatform教程18】多平台资源的设置和配置

要正确配置项目以使用多平台资源&#xff0c;请执行以下操作&#xff1a; 添加库依赖项。 为每种资源创建必要的目录。 为限定资源创建其他目录&#xff08;例如&#xff0c;深色 UI 主题或本地化字符串的不同图像&#xff09;。 依赖项和目录设置 要访问多平台项目中的资源…...

MT6765核心板_MTK6765安卓核心板规格参数_联发科MTK模块开发

MTK6765安卓核心板是基于联发科高效八核处理器平台开发的一款强大硬件解决方案。这款核心板的核心是采用12纳米工艺打造的MTK6765 CPU&#xff0c;具备四个主频高达2.3GHz的CORTEX-A53核心和四个主频为1.8GHz的CORTEX-A53核心&#xff0c;提供了卓越的处理性能。用户可以根据需…...

conda常用维护命令

文章目录 1. 初始化和更新 Conda更新 Conda初始化 Conda&#xff08;如果需要&#xff09; 2. 管理环境创建新环境激活环境停用当前环境列出所有环境删除环境 3. 管理包安装包卸载包更新包更新所有包查找包列出已安装包 4. 导入导出环境导出环境配置从文件创建环境 5. 管理通道…...

Html——10 关键字和描述

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>淘宝网</title><meta name"keywords" content"我要自学网,自学HTML,自学CSS"/><meta name"description" content"要设置…...

Mysql(MGR)和ProxySQL搭建部署-Docker版本

项目路径&#xff1a;D:\study\backend\mysql\mgr 一、Mysql(MGR) 1.1 docker-compose.yaml volumes: # MySQL配置文件目录 - "./mysql-1/conf.d/my.cnf:/etc/mysql/my.cnf" # MySQL工作目录 - "./mysql-1/data:/var/lib/mysql" …...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...