CSRF和HPP(HTTP参数污染)的区别?

Difference between CSRF and HPP (HTTP Parameter Pollution)?

我通过这个 link 了解了 HPP(HTTP 参数污染)攻击。

在 HPP 攻击中,攻击者似乎修改了 HTTP 参数并将修改后的 URL 发送给受害者。这不和CSRF攻击一样吗?如果没有,有人可以告诉我 CSRF 和 HPP 之间有什么区别吗?

从linked文章的描述来看,HPP似乎是一种特定类型的注入攻击,通过修改请求参数来修改返回页面的内容。从某种意义上说,它是反射型 XSS 攻击的更通用版本;而对于 XSS,您试图通过篡改请求来注入和执行恶意 javascript,而在 HPP 中,您试图修改任何数据(在给定的示例中,用于生成 URL 的数据)以注入恶意数据。

然而,术语 CSRF 通常用于描述一种攻击,在这种攻击中,将完全有效的请求发送到服务器的上下文中会导致意外或不需要的行为。比较标准的示例是诱骗用户点击您网站上的 link,这会向用户的银行网站(作为用户)发送请求,将资金从他们的账户转入您的账户。

没有什么可以阻止攻击者使用 HPP 或 XSS 攻击和 CSRF 攻击。 XSS 或 HPP 攻击利用了在处理用户输入时缺乏验证的优势,用户输入后来作为响应的一部分返回,而 CSRF 攻击利用应用程序流程中的 "sequence breaking" 来导致意外行为。

HTTP 参数污染是指当您的应用程序向另一个系统发出后端 HTTP 请求时,这些参数可以通过输入到您的主应用程序中进行操作。 HPP 的定义是攻击者将重复的参数名称传递给后端请求,这会覆盖应用程序显式传递的参数值。一个类似的漏洞,HTTP Parameter Injection 是通过攻击者向后端请求添加一个新参数来定义的,该参数由其他系统解释。因此 HPI 导致添加新参数,而 HPP 导致现有参数被忽略或以新方式解释。

有关 HPP 的具体示例,请参阅 my answer here

CSRF 不需要任何后端 HTTP 请求。这是一个前端请求,但是由受害者在他们不知情的情况下发出的。这基本上意味着恶意请求是使用受害者的浏览器和受害者的授权 cookie 发出的。它可以像攻击者页面上的隐藏图像一样简单:

<img src="https://bank.example.com/transfer_money?toAmount=999&toAccount=12345678" />

只要受害者访问攻击者的页面(例如,在 link 通过电子邮件发送给他们,或在论坛上发布的内容之后),就会触发此事件。

有关使用 POST 方法的另一个示例,请参阅 my answer here

有时可以通过 CSRF 利用 HPP 漏洞。例如,一个要求受害者是登录到可通过 HPP 进行利用的系统的人。例如POST 到 https://www.example.com/transferMoney.php 可以由攻击者的站点进行,传递 toAccount=9876 POST 参数导致受害者使用他们的 www.example.com.

关于您问题中的文章,我认为这不是真实的 HPP 攻击,因为任何导致状态更改的操作都应通过 POST 方法而不是 GET link 如文章所示,因此您实际上不会从当前页面构造 link 操作(但是,嘿,一切皆有可能)。这就是为什么 HPP 实际上更多地围绕后端请求。