下图作为例子解释什么是HPP
服务器端有两个部分:
- 第一部分为tomcat 为引擎的jsp 型服务器
- 第二部分为apache为引擎的php 服务器,真正提供web 服务的是php 服务器。
工作流程为:client 访问服务器,能直接访问到tomcat 服务器,然后tomcat 服务器再向apache 服务器请求数据。数据返回路径则相反。
重点:
index.php?id=1&id=2
,你猜猜到底是显示 id=1
的数据还是显示 id=2
的?
Explain:apache(php)解析最后一个参数,即显示id=2 的内容。Tomcat(jsp)解析第一个参数,即显示id=1 的内容。问题
index.jsp?id=1&id=2
请求,针对第一张图中的服务器配置情况,客户端请求首先过tomcat,tomcat 解析第一个参数,接下来tomcat 去请求apache(php)服务器,apache 解析最后一个参数。那最终返回客户端的应该是哪个参数?Answer
此处应该是
id=2
的内容,应为时间上提供服务的是apache(php)服务器,返回的数据也应该是apache 处理的数据。而在我们实际应用中,也是有两层服务器的情况,那为什么要这么做?是因为我们往往在tomcat 服务器处做数据过滤和处理,功能类似为一个WAF。而正因为解析参数的不同,我们此处可以利用该原理绕过WAF 的检测。该用法就是HPP(HTTP Parameter Pollution),http 参数污染攻击的一个应用。HPP 可对服务器和客户端都能够造成一定的威胁。