前端安全 | HPP 的攻击举例与防范

前端安全 | HPP 的攻击举例与防范

💡 原文中文,约1800字,阅读约需5分钟。
📝

内容提要

HPP(HTTP参数污染)指HTTP请求中同名参数出现多次,攻击者传入键相同、值不同的参数以绕过校验。文章以HackerOne分享按钮漏洞为例:篡改URL后,Facebook分享时优先采用后一个u参数,跳转到攻击者网站。文中用Express登录demo演示:请求体含两个account参数,后端不校验时最终登录的是后一个值ursb。防范关键在于后端严格校验输入参数,并正确处理同名参数。

🔎

延伸解读

HPP 的根源:协议允许同名参数,后端解析策略不一

文章指出,HTTP 协议本身允许同名参数出现多次,而不同服务器对多个同名参数的处理方式不同。这意味着漏洞是否被触发,很大程度上取决于后端框架或中间件如何解析重复参数。开发者不能假设“参数名唯一”,而应意识到请求中可能包含多个同名键,并根据业务需求明确处理策略,否则攻击者可能利用解析差异绕过校验。

两个案例揭示的共性:后出现的参数可能覆盖前值

HackerOne 分享按钮漏洞中,Facebook 优先采用后一个 u 参数,导致跳转到攻击者网站;Express 登录 demo 中,后端未校验时最终登录的是后一个 account 值 ursb。两个案例都说明,当后端或第三方服务对同名参数取“后值优先”时,攻击者只需追加一个同名参数即可覆盖原始意图。这种覆盖不一定需要复杂构造,却可能直接改变业务结果。

防范重点不在前端,而在后端严格校验与明确处理

文章强调,防止 HPP 最重要的是后端做好输入参数校验,并正确处理同名参数。由于 HTTP 协议允许同名参数,应用在整个处理流程中都要根据业务特征决定如何应对重复参数,例如拒绝、合并或明确取某一个值。仅依赖前端校验或默认解析行为并不可靠,后端必须对参数数量和取值进行严格检查,才能避免被篡改后的请求绕过防护。

❓

Q&A

什么是HTTP参数污染(HPP)?

HPP(HTTP Parameter Pollution)指在HTTP请求中同名参数出现多次,攻击者通过传入键相同但值不同的参数,绕过某些防护与参数校验。它是一种注入型漏洞。

HPP攻击是如何利用社交分享按钮的?

以HackerOne漏洞为例,攻击者篡改分享链接,在URL后添加?&u=恶意网站,当通过Facebook分享时,由于后一个u参数优先级更高,Facebook会跳转到攻击者网站而非原网站。

在Express登录demo中,HPP如何导致登录账户被篡改?

请求体包含两个account参数(如airing和ursb),后端未校验时,Express会取后一个值,最终登录的是ursb而非用户输入的airing。

如何防范HPP漏洞?

防范HPP的关键在于后端严格校验输入参数,并正确处理同名参数。需要意识到HTTP协议允许同名参数,根据业务特点做正确处理。

不同服务器对同名参数的处理方式有区别吗?

是的,HPP的行为取决于后端收到多个同名参数时的处理方式,不同服务器处理方式不同,因此需要根据业务特征正确处理。

HPP漏洞属于哪一类安全漏洞?

HPP是一种注入型漏洞,攻击者通过在HTTP请求中插入特定参数来发起攻击。

🏷️

标签

➡️

继续阅读