0

使用 Checkmarx,这一页对“request.getParameterNames()”有多种用途,并被 Checkmarx 标记为“CGI_Reflected_XSS_All_Clients”(查询名称)。该页面是“error.jsp”,因此它是在我公司的多个应用程序中使用的通用页面。发生意外错误时会显示此页面。为什么这样?谁知道,最好不要显示它,而是将其注销。我对 Checkmarx 报告为易受攻击的修复代码非常陌生。

<h3>Request Parameters</h3>
<pre>
<%
   lEnum = request.getParameterNames();
   while(lEnum.hasMoreElements())
   {
      String key = (String)lEnum.nextElement();
      String[] paramValues = request.getParameterValues(key);
      for(int i = 0; i < paramValues.length; i++)
      {
         out.println("  " + key + " : "  + paramValues[i]); 
      }
   }
%>
</pre>
4

2 回答 2

1

输出到页面的值需要为 HTML 进行转义。用它们的实体替换引号、括号和 & 符号。这可以通过Guava之类的库来完成,例如:

Escaper escaper = HtmlEscapers.htmlEscaper();
out.println("  " + escaper.escape(key) + " : " + escaper.escape(paramValues[i]));
于 2017-09-12T19:07:58.170 回答
0

使用 Spring-Web 的HtmlUtils.htmlEscape(Variable)在传递给方法之前清理参数。

另外,你可以试试

变量=Variable.replace("'", ""); 和它一起。

在传递给方法之前使用两个参数。

于 2017-09-13T11:36:32.257 回答