2017-09-12 72 views
0

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

<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> 

回答

1

输出到页面的值需要为HTML转义。用它们的实体替换引号,括号和&符号。这可以通过库如Guava喜欢做:

Escaper escaper = HtmlEscapers.htmlEscaper(); 
out.println(" " + escaper.escape(key) + " : " + escaper.escape(paramValues[i])); 
0

使用Spring的Web的HtmlUtils.htmlEscape(可变)传递给方法前消毒参数。

此外,您还可以尝试

变量= Variable.replace( “”“, ”“); 也是如此。

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