为什么在 HTTP 参数污染攻击中需要两个参数?

信息安全 xss 账户安全
2021-09-03 17:56:44

我正在阅读有关 HTTP 参数污染的信息,但我对一件事感到困惑。如果有这样的端点,

https://security.stackexchange.com/editpost/?postuid=19348

然后你尝试了 HPP 攻击,看起来像

https://security.stackexchange.com/editpost/?postuid=19348&postuid=1

后端不会仍然尝试验证您正在尝试编辑的用户帖子吗?通过您随请求发送的 cookie

为什么这行得通,

https://security.stackexchange.com/editpost/?postuid=19348&postuid=1

为什么不能像这样编辑 URL?

https://security.stackexchange.com/editpost/?postuid=1
1个回答

这个想法是服务器代码的不同部分以不同的方式解释请求,从而导致应用程序容易受到 HTTP 参数污染。

对于您的示例/editpost/?postuid=19348&postuid=1,对于执行授权(那些必须检查授权postuid=19348)和实际编辑(那些必须编辑postuid=1)的代码部分,查询字符串的解析方式将有所不同。

这在现代 Web 应用程序中不是常见问题,因为参数解析通常由框架完成,例如在(现代版本的)php 中,$_GET["postuid"]两个代码片段将包含相同的值,从而使 HTTP PP 攻击无用。

当“手动”解析参数时,即在应用程序逻辑层上,HTTP PP 曾经是一个大问题(现在仍然是)。这为不同的人以不同的方式实现此解析打开了大门。