如何用这个scriplet来避免XSS?

时间:2017-09-12 13:38:18

标签: jsp xss checkmarx

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

另外,你可以尝试

变量= Variable.replace(“'”,“”); 还有它。

在传递给方法之前,请同时使用两个参数。