SonarQube JSP分析显示假阳性 "JSP中潜在的XSS"

问题描述 投票:0回答:1

使用SonarQube对我们的Web应用进行静态代码分析,最近我也激活了JSP插件。 分析中提出了抱怨未封装表达式的问题,这是原代码的正确问题描述。

<!DOCTYPE html>
<html lang="${pageContext.request.locale}">

抱怨第二行)。 SonarQube规则(findsecbugs-jsp:XSS_JSP_PRINT)给出了以下解释和潜在的解决方案。

Blockquote 发现了一个潜在的XSS。它可以被用来在客户端的浏览器中执行不需要的JavaScript。(参见参考资料)

漏洞代码。

<%

String taintedInput = (String) request.getAttribute("input");

%>

[...]

<%= taintedInput %>

解决方案。

解决办法:<%= taintedInput %>。

String taintedInput = (String) request.getAttribute("input");

%&gt.taintedInput = (String) request.getAttribute("input"); %>

[...]

<%= Encode.forHtml(taintedInput) %>

对XSS最好的防御就是像上面的例子一样,采用上下文敏感的输出编码。通常有4个上下文需要考虑。HTML、JavaScript、CSS(样式)和URL。请遵循OWASP XSS预防Cheat Sheet中定义的XSS保护规则,该规则对这些防御措施进行了详细的解释。

(findbugs规则也可以在以下网址找到 https:/find-sec-bugs.github.iobugs.htm#XSS_JSP_PRINT。).

虽然描述的情况与我原来的代码并不完全吻合(我用的是EL,例子用的是纯JSP),但我还是尝试着按照规则,将OWASP Java Encoder添加到我们的项目中。https:/owasp.orgowasp-java-encoderencoder-jspindex.html。 这是规则中提到的一个引用。

由此产生的代码看起来是这样的。

<%@ taglib prefix="e" uri="https://www.owasp.org/index.php/OWASP_Java_Encoder_Project" %>

<!DOCTYPE html>
<html lang="${e:forHtmlAttribute(pageContext.request.locale)}">

这与OWASP taglibs文档网站上的例子几乎完全吻合,而且似乎是正确的。

不幸的是,在再次运行SonarQube分析后,我在同一行得到了完全相同的问题(这次是新代码)。

谁能告诉我到底是什么触发了这个规则,以及代码应该是怎样的,才不会再引发这个问题?

记录一下。 我还用了e:forHtml而不是e:forHtmlAttribute,这更接近规则,但在这种情况下似乎不太合适。 甚至e:forHtml也留下了问题。

我使用的是SonarQube Community EditionVersion 7.9.1(build 27448),内置FindBugs安全JSP插件。

非常感谢任何提示。

编辑:看来,不使用taglib,我可以让findbugs的逃逸被重新识别。 这可以工作,并且不再引起问题,但是我认为它很丑陋。

<%@ page import="org.owasp.encoder.Encode" %>

<!DOCTYPE html>
<html lang="<%Encode.forHtmlAttribute("${pageContext.request.locale}");%>">
jsp sonarqube
1个回答
0
投票

这里只是一个想法。也许发生这种情况是因为它直接从用户输入中识别出渲染的HTML内容,即使你正确地转义了它。你能不能分两步来做?

  1. 为内容设置一个新的变量e:forHtmlAttribute(pageContext.request.locale)
  2. 使用新的变量在你的 <html lang= 内容

干杯!

© www.soinside.com 2019 - 2024. All rights reserved.