类型: 安全缺陷

    HTTP参数污染(HPP)攻击根据HTTP协议中允许同名参数出现多次,如果程序没有正确地检查用户输入,攻击者可以在传输参数的时候传输key相同而value不同的参数,从而达到绕过某些防护与参数校验。
    如果向Web应用程序提交参数,并且如果这些参数与现有参数的名称相同,Web应用程序可能会有下列一种反应:Web程序可能从第一个参数或最后一个参数提取数据,也可能从所有参数中获取数据并连接起来。

    下面这个表格列举了一些常见的Web服务器对同样名称的参数出现多次的处理方式:

    Web服务器 获取的参数
    ASP.NET/IIS 所有参数组成用逗号分隔的字符串
    ASP/IIS 所有参数组成用逗号分隔的字符串
    PHP/Apache 最后一个参数
    JSP Servlet/Apache Tomcat 第一个参数
    JSP Servlet/Oracle Application Server 10g 第一个参数
    IBM HTTP Server 第一个参数
    mod_perl/Apache 所有参数成为数组
    Spring 4 起,UriTemplate类可执行用于阻止请求参数注入的编码。

    1. String lang = request.getParameter("lang");
    2. GetMethod get = new GetMethod("http://www.codesafe.com");
    3. get.setQueryString("lang=" + lang + "&id=" + id);
    4. get.execute();

    攻击者可能会提供一个lang(例如en&id=1),然后攻击者将可以随意更改该id。