问题背景

sonar扫描使用的规则:FindBugs Security JSP

符合过滤规则:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MS9rAmAZ-1607667193014)(../image/findbugs-sec-jsp.png)]

但是以上这个规则,扫不出jsp

page_top.jsp,

<script>
    window._common_counter_code_ = "channel=${param.channelId}";
    window._common_counter_uuid_ = "${param.uuid}";
    window._common_counter_from_ = "";// 如果是cms页面则填cms,非cms页面可为空或者忽略该参数
    <%@ include file="/global_ssi/pconline/count/index.html"%>
</script>

问题分析

  1. 了解相关知识点

    [${param.xxx}获取url中的参数]`

    比如:一个网址:127.0.0.1/test/testparam?uuid=3&channelId=4
    p a r a m . u u i d 就 可 以 直 接 获 取 到 u u i d 的 值 , 也 就 是 3 用 {param.uuid}就可以直接获取到uuid的值,也就是3 用 param.uuiduuid3{param.channelId}就可以直接获取到channelId的值,也就是4
    ${param.uuid} 就等价于 request.getparam(“uuid”),也就是服务器从页面或者客户端获取的内容

  2. findbugs-security源码解查看

    其实源码,我看的似懂非懂,实则还是不懂。我读源码能力太弱,只能看个大概。最开始怀疑不支持JSP-JSTL的规则,但查了源码发现并不是。

在这里插入图片描述

  1. 查找各大论坛资料

    思路中断后,想着不如本地测试findbugs好了,sonar-findbugs只是插件,不会无故把findbugs里原有的规则去掉,只会增加才对,所以果断本地调试,找idea的插件spotbugs(2019版本是QAPlug-spotbugs),操作方法网上自个找吧。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J6PxM1HE-1607667193021)(…/image/spotbugs.png)]

    安装好后,直接对项目进行spotbugs扫描,仍然没办法扫到jsp这个漏洞

    搞了1天,没有眉目,领导在催,没办法只有回复,还没解决

    然后第2天,我把微信PC退了。

    专门针对findbugs的源码进行了查看:https://github.com/find-sec-bugs/find-sec-bugs/

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d9InnnFW-1607667193023)(../image/findbugs-sec-jsp1.png)]

    里面是有针对JSTL进行的规则:

在这里插入图片描述

确认肯定是支持jsp-jstl扫描的,但是为什么我扫不出?反正网上百度、google搜的资料基本都不会有此类问题,或者说没有针对性的问题

我把find-sec-bugs的Issues打开,搜索JSP,还果真找着一条相对比较符合的问题:

JSP filename and line information missing #459

尝试添加插件进项目的pom.xml文件,再进行相应扫描

解决

  • pom.xml添加预编译jspc插件和soptbugs插件

    <plugin>
       <groupId>org.eclipse.jetty</groupId>
       <artifactId>jetty-jspc-maven-plugin</artifactId>
       <version>9.4.15.v20190215</version> <!-- Latest version -->
       <executions>
          <execution>
             <id>jspc</id>
             <goals>
                <goal>jspc</goal>
             </goals>
             <configuration>
                <jspc>
                   <failOnError>false</failOnError>
                   <smapSuppressed>false</smapSuppressed>
                   <smapDumped>true</smapDumped>
                </jspc>
                <keepSources>true</keepSources>
                <useProvidedScope>true</useProvidedScope>
             </configuration>
          </execution>
       </executions>
    </plugin>
    <!--如果sonar扫描,要去掉。idea本地扫描,需加上-->
    <plugin>
       <groupId>com.github.spotbugs</groupId>
       <artifactId>spotbugs-maven-plugin</artifactId>
       <version>3.1.11</version>
       <configuration>
          <fork>false</fork>
          <xmlOutput>true</xmlOutput>
          <!--<htmlOutput>true</htmlOutput>-->
          <effort>Max</effort>
          <threshold>Low</threshold>
          <failOnError>true</failOnError>
          <includeFilterFile>spotbugs-security-include.xml</includeFilterFile>
          <!--<excludeFilterFile>${session.executionRootDirectory}/spotbugs-security-exclude.xml</excludeFilterFile>-->
          <plugins>
             <plugin>
                <groupId>com.h3xstream.findsecbugs</groupId>
                <artifactId>findsecbugs-plugin</artifactId>
                <version>1.8.0</version>
             </plugin>
          </plugins>
       </configuration>
    </plugin>
    
  • 控制台执行

    mvn clean install spotbugs:spotbugs

  • 结果查看

    这是个XML报告,html报告我不知道杂出来

在这里插入图片描述

在这里插入图片描述

虽然报告不好看,但还是可以搜出来。

所以findbugs是扫描的编译后的jsp文件,并不是源jsp

  • jenkins流水线运行

    编译后,要查看workspace,target/classes一定要有编译后的jsp目录。
    在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐