HTTP参数污染

era*_*ndi 3 php security

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

提前致谢

Sil*_*Fox 8

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

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

例如,如果您的网站使用以下前端URL进行汇款:

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

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

amount=1000&fromAccount=12345
Run Code Online (Sandbox Code Playgroud)

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

https://backend.example/doTransfer.php

toAccount=9876&amount=1000&fromAccount=12345
Run Code Online (Sandbox Code Playgroud)

现在你说PHP只在重复的情况下采用最后一个参数.

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

amount=1000&fromAccount=12345&toAccount=99999
Run Code Online (Sandbox Code Playgroud)

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

https://backend.example/doTransfer.php

toAccount=9876&amount=1000&fromAccount=12345&toAccount=99999
Run Code Online (Sandbox Code Playgroud)

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

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

客户端

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