sonar-jsp-xss漏洞扫描
问题背景sonar扫描使用的规则:FindBugs Security JSP符合过滤规则:但是以上这个规则,扫不出jsppage_top.jsp,<script>window._common_counter_code_ = "channel=${param.channelId}";window._common_counter_uuid_ = "${param.uuid}";window
问题背景
sonar扫描使用的规则:FindBugs Security JSP
符合过滤规则:
但是以上这个规则,扫不出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>
问题分析
-
了解相关知识点
[${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.uuid就可以直接获取到uuid的值,也就是3用{param.channelId}就可以直接获取到channelId的值,也就是4
${param.uuid} 就等价于 request.getparam(“uuid”),也就是服务器从页面或者客户端获取的内容 -
findbugs-security源码解查看
其实源码,我看的似懂非懂,实则还是不懂。我读源码能力太弱,只能看个大概。最开始怀疑不支持JSP-JSTL的规则,但查了源码发现并不是。
-
查找各大论坛资料
思路中断后,想着不如本地测试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/
里面是有针对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目录。
更多推荐
所有评论(0)