HTTP 参数污染(HPP)详解
1. 什么是 HTTP 参数污染(HPP)?
HTTP 参数污染(HTTP Parameter Pollution,简称 HPP)是一种 Web 应用攻击技术,攻击者通过在 HTTP 请求中注入多个相同的参数来绕过安全控制或篡改应用逻辑,进而执行未预期的操作。
现代 Web 应用通常使用 GET 和 POST 请求来传递参数,服务器端会解析这些参数并进行相应处理。然而,不同的 Web 服务器、框架和编程语言对相同参数的处理方式可能不同,例如:
- 有的服务器会只取第一个参数的值
- 有的服务器会取最后一个参数的值
- 有的服务器会将所有相同参数的值合并为一个数组
攻击者可以利用这些不一致性来实现绕过安全验证、参数篡改或进行更复杂的攻击,如 XSS、SQL 注入等。
2. HTTP 参数污染的类型
HPP 主要分为两类:
(1)客户端端 HPP(Client-Side HPP)
- 发生在浏览器端或前端应用中,通常用于绕过 JavaScript 校验。
- 例如,某些 Web 应用可能在前端 JavaScript 中校验参数格式,但攻击者可以手动修改 URL 以绕过这些限制。
- 示例:
https://example.com/search?query=apple&query=banana- 如果前端 JavaScript 只检查第一个
query参数,那么后端可能会解析query=banana,绕过前端校验。
- 如果前端 JavaScript 只检查第一个
(2)服务器端 HPP(Server-Side HPP)
- 发生在服务器端,主要影响参数解析、鉴权、日志记录等。
- 服务器端可能使用不同的方式解析相同参数,导致安全风险。
- 示例:
POST /login HTTP/1.1 Host: example.com Content-Type: application/x-www-form-urlencodedusername=admin&password=1234&password=5678- 如果服务器使用
password=5678进行验证,而日志记录使用password=1234,攻击者可能利用这种差异实现身份伪造或绕过审计。
- 如果服务器使用
3. HPP 的危害
HTTP 参数污染可能导致以下安全风险:
- 绕过安全机制:
- 如果 Web 应用对参数有严格的验证机制,攻击者可以通过 HPP 绕过这些机制。例如绕过 CSRF 保护、身份验证等。
- 注入攻击:
- 结合 SQL 注入、XSS 或命令注入等攻击技术,HPP 可能导致更严重的后果。
- 访问控制绕过:
- 例如 API 端点可能使用
role=user进行权限控制,但 HPP 可能允许攻击者提交role=admin来提升权限。
- 例如 API 端点可能使用
- 日志欺骗:
- 服务器可能在日志记录时使用第一个参数,而实际验证时使用最后一个参数,从而让攻击者隐藏攻击痕迹。
4. HPP 的利用案例
案例 1:绕过身份验证
攻击者尝试登录 Web 应用,利用多个 password 参数:
POST /login HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencodedusername=admin&password=wrongpassword&password=correctpassword
- 如果后端使用
password=correctpassword进行身份验证,而安全日志记录password=wrongpassword,管理员可能无法检测到真正的攻击。
案例 2:利用 HPP 进行 XSS 攻击
攻击者尝试污染 search 参数并插入恶意 JavaScript 代码:
GET /search?query=<script>alert(1)</script>&query=safe_search HTTP/1.1
- 如果前端校验
query但后端直接返回query=<script>alert(1)</script>,可能导致 XSS 攻击。
案例 3:API 访问控制绕过
某 API 端点使用 role=user 进行权限控制:
GET /api/data?user_id=123&role=user HTTP/1.1
攻击者尝试提交多个 role 参数:
GET /api/data?user_id=123&role=user&role=admin HTTP/1.1
- 如果服务器解析最后一个
role,攻击者可能获得管理员权限。
5. 如何防御 HTTP 参数污染?
防止 HPP 需要从服务器端和客户端两方面入手。
(1)服务器端防御
- 规范参数解析逻辑:确保后端框架和 Web 服务器对相同参数的处理方式一致。
- 拒绝重复参数:在服务器端拒绝接受多个相同的参数,或使用白名单方式限制参数个数。
- 日志记录一致性:确保日志中记录的参数与应用实际使用的参数一致。
- 输入验证:对所有输入参数进行严格的验证,避免参数被污染。
- 使用安全框架:如 OWASP 提供的安全库可以帮助过滤恶意参数。
(2)客户端防御
- 前端校验:前端 JavaScript 应用应正确处理参数,并防止多参数输入。
- 安全编码:避免直接拼接 URL,使用
encodeURIComponent()进行编码。 - 限制 GET 请求长度:避免 GET 请求参数过长,从而减少被污染的可能性。
6. 结论
HTTP 参数污染(HPP)是一种常见的 Web 攻击技术,攻击者通过注入多个相同的参数来绕过安全机制或篡改应用逻辑。由于不同服务器和框架解析参数的方式不同,HPP 可能会导致身份验证绕过、XSS、SQL 注入等安全风险。
为防止 HPP 攻击,开发者应确保服务器端参数解析一致性,拒绝重复参数,并加强输入验证和日志记录。通过严格的安全策略,可以有效降低 HPP 带来的风险,提高 Web 应用的安全性。
相关文章:
HTTP 参数污染(HPP)详解
1. 什么是 HTTP 参数污染(HPP)? HTTP 参数污染(HTTP Parameter Pollution,简称 HPP)是一种 Web 应用攻击技术,攻击者通过在 HTTP 请求中注入多个相同的参数来绕过安全控制或篡改应用逻辑&#…...
阿里云轻量服务器docker部署nginx
拉取nginx docker镜像 sudo docker pull nginx创建以下挂载目录及文件 用户目录下:conf html logs conf: conf.d nginx.conf html: index.html conf.d: default.confnginx.conf添加文件内容 events {worker_connections 1024; }http {include /etc/ngi…...
(萌新入门)如何从起步阶段开始学习STM32 —— 我应该学习HAL库还是寄存器库?
概念 笔者下面需要介绍的是库寄存器和HAL库两个重要的概念,在各位看完之后,需要决定自己的学习路线到底是学习HAL呢?还是寄存器呢?还是两者都学习呢? 库寄存器 库寄存器就是简单的封装了我们对寄存器的操作…...
Windchill开发-电子仓相关对象信息查询SQL
电子仓相关对象信息查询SQL 一、说明二、数据表信息三、数据表字段说明3.1 HOLDERTOCONTENT3.1.1 对象类型3.1.2 存储类型 3.2 APPLICATIONDATA3.2.1 类别3.2.2 与对象的角色关系3.2.3 存储方式3.2.4 其他字段 3.3 URLDATA3.4 STREAMDATA3.5 FVITEM3.6 FVMOUNT3.6.1 安装状态3.…...
MySQL 数据库定时任务及进阶学习
一、引言 在当今数字化时代,数据管理的高效性和自动化至关重要。MySQL 作为一款广泛应用的开源关系型数据库管理系统,提供了强大的功能来满足各种数据处理需求。其中,定时任务执行功能对于自动化数据操作、维护数据完整性以及优化系统性能具…...
DeepSeek教unity------MessagePack-01
中文:GitCode - 全球开发者的开源社区,开源代码托管平台 MessagePack是C# 的极速 MessagePack 序列化器。它比 MsgPack-Cli 快 10 倍,并且性能超过其他 C# 序列化器。MessagePack for C# 还内置支持 LZ4 压缩——一种极其快速的压缩算法。性能在诸如游戏…...
知识拓展:Python序列化模块 marshal 模块详解
Python marshal 模块学习笔记 1. 简介 marshal 是 Python 的内部序列化格式,主要用于序列化和反序列化 Python 对象。它是 Python 字节码(.pyc文件)使用的序列化格式,比 pickle 更原始和受限,但也更快速和安全。 http…...
leetcode 2684. 矩阵中移动的最大次数
题目如下 数据范围 本题使用常规动态规划就行,不过要注意由于有三个转移的方向,所以我们对dp数组的遍历应该是从上到下 从左到右即按列优先遍历。通过代码 class Solution { public:int maxMoves(vector<vector<int>>& grid) {int …...
机械学习基础-6.更多分类-数据建模与机械智能课程自留
data modeling and machine intelligence - FURTHER CLASSIFICATION 混淆矩阵评估指标:灵敏度和特异度ROC 曲线文字说明部分 AUC:ROC曲线下面积 支持向量机思路补充背景知识点积超平面(HYPERPLANES超平面的法向量到超平面的最小距离数据集与超…...
自动化测试实战
http://8.137.19.140:9090/blog_login.htm 账号: lisi 密码: 123456 上面是系统链接 1. 自动化测试的步骤 1.1 编写Web测试用例 1.2 创建空项目添加依赖 然后我们创建一个新的java项目(使用maven管理),然后引入我们的配置文件:屏幕截图,驱动管理,selenium库 <dependency…...
qt QPlainTextEdit总结
QPlainTextEdit 概述 用途:专为处理纯文本设计,适合大文本编辑和简单文本显示(如日志、代码编辑器)。 特点:相比QTextEdit,轻量高效,支持快速加载和滚动大文件,默认不支持富文本。 …...
AWS SES 邮件服务退信/投诉处理与最佳实践指南
在使用 AWS SES 发送邮件时,合理处理退信和投诉是维护发送声誉的关键。本文将详细介绍 SES 中的退信/投诉处理机制以及相关最佳实践。 一、退信处理机制 © ivwdcwso (ID: u012172506) 1.1 退信类型 在 SES 中,退信分为两种类型: 硬退信(Hard Bounce) 永久性错误,如无效…...
理解WebGPU 中的 GPUAdapter :连接浏览器与 GPU 的桥梁
在 WebGPU 开发中, GPUAdapter 是一个至关重要的对象,它作为浏览器与 GPU 之间的桥梁,为开发者提供了请求 GPU 设备、查询 GPU 特性以及获取适配器信息的能力。本文将详细介绍 GPUAdapter 的核心属性和方法,并通过实际代码…...
rpx和px混用方案
(1)创建一个全局的样式配置文件: // styles/variables.scss :root {// 基础字体大小--font-size-xs: 12px;--font-size-sm: 14px;--font-size-md: 16px;--font-size-lg: 18px;// 响应式间距--spacing-xs: 5px;--spacing-sm: 10px;--spacing-…...
光伏设计软件分类:无人机、Unity3D引擎齐上阵
无人机3D设计 无人机可搭载高分辨率光学相机、激光雷达等测绘设备,对目标区域进行全方位、多角度的航拍作业。通过对采集到的影像数据进行导入处理,运用复杂的图像识别算法与三维重建技术,构建出云端实景3D模型,在实景3D模型中进…...
太速科技-616-基于6U VPX XCVU9P+XCZU7EV的双FMC信号处理板卡
基于6U VPX XCVU9PXCZU7EV的双FMC信号处理板卡 一、板卡概述 板卡基于6U VPX标准结构,包含一个XCVU9P 高性能FPGA,一片XCZU7EV FPGA,用于 IO扩展接口,双路HPC FMC扩展高速AD、DA、光纤接口等。是理想应用于高性能数字计算&…...
国产鲲鹏920+欧拉+达梦
1,访问达梦官网 产品下载-达梦数据 1.1,官网没有欧拉的版本; 1.2,拨打客服热线,联系售前单独获取试用版 2,创建鲲鹏920欧拉环境: 2.1,阿里云:没有arm系统 2.2…...
LeetCode--146. LRU 缓存【Golang中的list】
146. LRU 缓存 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,…...
查看notebook的jupyter token
如果你忘记了jupyter的token,那么你可以命令行登录后台,查看。 jupyter notebook list 把token复制下,贴到网站上即可。jupyter登录页已经提示了。...
vue+springboot+webtrc+websocket实现双人音视频通话会议
前言 最近一些时间我有研究,如何实现一个视频会议功能,但是找了好多资料都不太理想,最终参考了一个文章 WebRTC实现双端音视频聊天(Vue3 SpringBoot) 只不过,它的实现效果里面只会播放本地的mp4视频文件&…...
你的电动车换挡逻辑够‘聪明’吗?聊聊AMT控制器(TCU)里的那些‘小心思’
你的电动车换挡逻辑够‘聪明’吗?聊聊AMT控制器(TCU)里的那些‘小心思’ 电动车AMT(自动机械变速器)控制器的核心在于TCU(Transmission Control Unit)的软件策略。与燃油车不同,电动…...
3分钟解锁网易云音乐灰色歌曲:UnblockNeteaseMusic实战指南
3分钟解锁网易云音乐灰色歌曲:UnblockNeteaseMusic实战指南 【免费下载链接】UnblockNeteaseMusic Revive unavailable songs for Netease Cloud Music 项目地址: https://gitcode.com/gh_mirrors/un/UnblockNeteaseMusic 还在为网易云音乐里那些灰色的、无法…...
TinyClaw:微智能体协同框架,打造个人AI自动化工作流
1. 项目概述:从单兵作战到团队协作的AI助手进化如果你和我一样,长期在个人效率工具和自动化脚本的海洋里折腾,那你肯定经历过这样的场景:为了处理一个稍微复杂点的任务,比如“整理上周的会议纪要,提取关键待…...
AI专著写作大揭秘!实测4款工具,一键生成20万字专著不是梦
对于学术研究者来说,撰写一部学术专著并不是短时间的灵感迸发,而是一场漫长的“持久战”。从选题的构思开始,到逻辑严谨的章节框架,再到每个段落的内容填充和文献的引用校验,每个步骤都充满了挑战。研究者需要在繁忙的…...
GRANDMICRO有容微推出GM502xx系列时钟缓冲器,专为AI/HPC计算与数据中心设计,全面支持PCIe 6.0/7.0
在人工智能、高性能计算及数据中心技术飞速发展的驱动下,系统对时钟信号的完整性、同步精度与抗干扰能力提出了更为严苛的要求。为应对这一挑战,有容微电子今日正式推出全新一代高性能时钟缓冲器芯片——GM502xx系列。该系列产品专为PCIe 6.0及未来7.0标…...
MouseClick:解放双手的开源鼠标自动化神器
MouseClick:解放双手的开源鼠标自动化神器 【免费下载链接】MouseClick 🖱️ MouseClick 🖱️ 是一款功能强大的鼠标连点器和管理工具,采用 QT Widget 开发 ,具备跨平台兼容性 。软件界面美观 ,操作直观&am…...
从‘特征图侦探’视角看MaxPool2D:你的CNN到底通过池化‘忘记’了什么?
从‘特征图侦探’视角看MaxPool2D:你的CNN到底通过池化‘忘记’了什么? 在计算机视觉领域,卷积神经网络(CNN)的成功很大程度上依赖于其层次化特征提取能力。而在这个特征提取的流水线上,池化层扮演着至关重要的角色——它像一位严…...
Rust终端光标控制库cursory:提升CLI/TUI应用交互体验
1. 项目概述:一个为开发者打造的终端光标样式库如果你和我一样,每天有超过一半的时间是在终端里度过的,那你一定对那个闪烁的光标再熟悉不过了。无论是写代码、跑脚本还是调试程序,光标就是我们在命令行世界里的“鼠标指针”。但你…...
KeymouseGo终极指南:三步解放双手,告别重复工作的鼠标键盘自动化神器
KeymouseGo终极指南:三步解放双手,告别重复工作的鼠标键盘自动化神器 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke…...
Pytorch图像去噪实战(五十六):配置覆盖机制实战,用命令行快速修改YAML实验参数
Pytorch图像去噪实战(五十六):配置覆盖机制实战,用命令行快速修改YAML实验参数 一、问题场景:每次改学习率都要复制一个YAML文件 前面我们已经用 YAML 管理图像去噪实验。 但实际调参时会遇到新问题: unet_lr1e-4.yaml unet_lr2e-4.yaml unet_bs4.yaml unet_bs8.yaml …...
