HTTP参数污染

时间:2013-11-06 10:06:38

标签: php security

在我们正在开发的网站中,在进行安全检查后,我们发现了安全问题。 此报告也包含HTTP参数污染漏洞。在网络上,我可以找到什么是HPP?它如何注入和等等; 但我找不到如何避免这种问题。 服务器语言是php。 &安培;我知道相同的参数可以重复和放大php只考虑最后一个参数,当有很多相同时。 但是做一些事情以避免这种风险没有任何意义。 那么,任何人都可以通过示例指导我如何避免HPP漏洞吗?

先谢谢

1 个答案:

答案 0 :(得分:7)

请注意,我在这里描述“服务器端HPP”,但是,该漏洞存在客户端版本。了解服务器端版本也有助于客户端版本。

HPP是指您的应用程序向另一个系统发出后端HTTP请求的时间。

e.g。如果您的网站使用以下前端网址进行汇款:

https://www.example.com/transferMoney.php

这只能通过POST方法访问,并采用以下参数:

amount=1000&fromAccount=12345

当您的应用程序处理此页面时,它会向后端系统发出以下POST请求,以使用固定的toAccount实际处理事务:

https://backend.example/doTransfer.php

toAccount=9876&amount=1000&fromAccount=12345

现在你说PHP只重复使用最后一个参数。

假设有人将您的网站的POST更改为以下内容:

amount=1000&fromAccount=12345&toAccount=99999

如果您的transferMoney.php页面容易受到HPP攻击,那么它现在可能会向后端系统发出以下请求

https://backend.example/doTransfer.php

toAccount=9876&amount=1000&fromAccount=12345&toAccount=99999

用户注入的第二个toAccount将覆盖此后端请求,并将资金转入自己的帐户(99999),而不是系统设置的预期帐户(9876) 。这对于攻击者修改他们自己的系统请求非常有用。但是如果攻击者可以从他们自己的网站生成这个链接并且诱使其他用户无意中关注不知道额外参数的链接,那么它对攻击者也是有用的。

要解决此问题,您应确保所有后端HTTP请求都已应用正确URL encoding以及验证所有输入。例如fromAccount是实际有效的帐号。同样在我的示例中,即使未经过验证,后端请求也应编码为fromAccount=12345%26toAccount%3D99999,这会阻止第二个toAccount被解释为单独的POST参数。

客户端

客户端HPP是指攻击者可以操纵页面上显示的链接,因此当他们被客户端跟踪时,他们会执行与应用程序开发人员不同的操作。例如,使用额外参数“污染”转移资金按钮,该参数会更改直接从应用程序而不是后端服务执行的“帐户”。