本插件在sonarqube-xml-plugin的基础上进行了修改,修改后的插件能够自动地检测出使用mybatis框架的项目中存在sql注入漏洞风险的代码片段,目前只是针对使用“$”的场景进行扫描,但对like、in等特殊的查询并没有作进一步的判断检测,这只是一个自定义插件的简单实践。
- 编译打包:
mvn clean install -DskipTests
- 启动sonar,以管理员权限卸载Soner内置的xml检测规则,避免冲突:
- 将编译所得的可执行jar包导入Sonar的/extention/plugins目录下:
- 重启Sonar
- 登陆Sonar,并在Rules中查看新建的XML检测规则信息如下:
- 在Quality-Profiles中将该条规则启动并设为default模式: 参考链接
- 使用sonar-scanner测试规则:
sonar-scanner -Dsonar.projectKey=test -Dsonar.sources=./src/ -Dsonar.host.url=http://xxx.xxx.xxx.xxx -Dsonar.login=xxxxxxxxxxxxxxxxxxx -Dproject.settings=./sonar-project.properties -Dsonar.scm.disabled=true
其中:
-Dsonar.sources
:设置扫描代码项目所在路径
sonar-project.properties配置文件里添加如下内容:
sonar.projectKey=test
sonar.projectName=test
sonar.sources=/opt/sonar-xml-master/src
sonar.java.binaries=/opt/sonar-xml-master/sonar-xml-plugin/target/classes
简单的测试用例:
该插件会自动扫描${}链接符的使用情况,在并其所在sql语句的id处进行标注:
- https://docs.sonarqube.org/latest/extend/developing-plugin/
- https://github.com/SonarSource/sonar-xml
- https://www.tabnine.com/code/java/methods/org.w3c.dom.Node/getFirstChild
- 完善针对mybatis框架的检测规则,针对
like
、in
等特殊场景下${}
的使用进行细粒度的检测 - 其他主流框架代码风险发现插件开发