我们的目的,扫描出来SQL拼接,SQL拼接如果没有用预编译从合规来说就是不对的。
Sonar测试环境安装
Sonarqube的docker化(有的人连docker都不会用,😔):
version: "3"
services: sonarqube: image: sonarqube:7.9-community ports: - "9000:9000" networks: - sonarnet environment: - SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar volumes: - sonarqube_conf:/opt/sonarqube/conf - sonarqube_data:/opt/sonarqube/data - sonarqube_extensions:/opt/sonarqube/extensions - sonarqube_bundled-plugins:/opt/sonarqube/lib/bundled-plugins
db: image: postgres:11.1 networks: - sonarnet environment: - POSTGRES_USER=sonar - POSTGRES_PASSWORD=sonar volumes: - postgresql_data:/var/lib/postgresql/data
networks: sonarnet: driver: bridge
volumes: sonarqube_conf: sonarqube_data: sonarqube_extensions: sonarqube_bundled-plugins: postgresql_data: |
运行sonar准备好,建议运行sonarqube7.9,这是一个LTS版本。支持大量的插件。
Sonar-pmd
安装完成打开127.0.0.1:9000,输入账号admin/admin,然后登陆配置,选择market,然后输入“chinese“ 安装中文语言包。方便E文不好的童鞋。同时安装好pmd
静态代码检测可以做哪些事情(看起来和正则表达式一样):
1、SQL拼接(同理可以检测其他的一些拼接,例如命令执行的参数是否拼接了)
2、SSO认证SDK是否接入
3、加密算法是否使用了国密
4、1day 特征检测
5、配置信息是否有密码明文特征
6、大部分语言的规则(Ecmascript,PHP,C#,Python,Ruby,GO,XML等)
静态代码审计有一些鸡肋,由于不能溯源变量的来源,显得好像只能检测一部分的安全问题。但是这个有一点好处就是语言多,支持的范围广,毕竟是ast检测,不是检测字节码。哦,对了,他还可以支持IDEA和Eclipse。甚至可以把合规的丢到开发的初期就解决问题,一份策略,2个地方可以使用,且支持多语言。Em..挺好的,加上字节码的检测,这样合规和漏洞都可以解决。
规则导入:
选择“代码规则“
然后选择“模板“->”只显示模板”
然后选择XPath rule template
然后选择“自定义规则“
然后到“质量配置”里创建一个PMD规则
并且在‘代码规则‘里激活它
Mybatis
怎么安装就不说了,这里创建一个Mybatis SQL拼接的质量配置
然后默认使用他
然后回到“代码规则”里找到
并继承他编写规则
定义3个SQL拼接规则
其实只要第一个规则就行了。意思就是任何元素的文本包含$符号就判定为SQL拼接
最后的效果如下
可以看到这些都是有问题的,潜在可能存在SQL注入
其他问题
1、sonar扫描xml需要增加一个sonar.source变量,即在扫描的时候增加-Dsonar.source=src
2、配置xml规则的时候,文件类型不需要填写
3、XPath语法2.0才会有fn:matches和starts-with等
明天继续分享规则怎么写
本文始发于微信公众号(xsser的博客):在sonSonarqube上编写XPath规则做SQL拼接代码检测
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论