fortify扫描代码的前置问题:
1)在使用foritfy的过程中很多人会发现他在windows下默认使用gbk访问代码以及生成报告,这样会有好多乱码,其实解决方案很简单。
添加环境变量 JAVA_TOOL_OPTIONS 这个变量的值为 -Dfile.encoding=UTF-8
或者在bin目录下的auditworkbench.cmd 和 ScanWizard.cmd 文件中第一个set环境变量之后,添加环境变量的值如图
set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8
这样就能保证主界面进程和生成报告的进程都使用utf-8编码(现在的项目极少数是gbk的了,基本都是utf-8编码的)
2)maven编译扫描的使用,很多人不是很明白,其实也很简单。首先在主目录下的plugins\maven目录中找到maven-plugin-bin.zip这个压缩包并解压缩。直接运行install.bat这个脚本(前提是已经配置好了maven以及配置了maven国内的加速镜像),执行完脚本后可以使用bin目录下的ScanWizard.cmd这个脚本进行编译扫描了,编译扫描请看下面的操作。
1: 代码审计的java工程编译问题
在代码审计中,你会发现有些工程的依赖jar包不完整或者物理隔离导致的java工程无法编译
最好的办法就是找到编译通过的开发工程师把他的maven仓库完整的复制到进行代码审计的电脑中的maven仓库文件夹中
例如:
那就把开发工程师的maven仓库文件夹覆盖到图片中路径的文件夹中
并且删掉里面所有的
_remote.repositories
这个文件(别问为什么,就这么干)
然后使用命令
mvn -o clean install
-o 这个参数代表离线模式,可以保证只在本地的maven仓库进行查找依赖,这样就能保证编译通过了
这样编译通过后,fortify扫描就是能按照bin目录中ScanWizard.cmd的maven编译式扫描方式进行扫描,下面看操作步骤:
下图这里选中这个enable选项也是要仔细观察是不是工程的主pom.xml而不是子目录中的pom.xml,子目录中的pom.xml是编译不能通过的
别忘记在扫描的自定义参数中使用mvn -o
如果扫描环境可以连接到maven仓库并且编译通过,则上述中复制maven文件夹、删除_remote.repositories文件和使用-o参数编译的操作就可以不使用了,直接就可以编译扫描
2:代码审计的问题管理和追溯问题
代码审计必须追溯到人,也就是代码最后提交人,只有这样才能保证代码的持续改进,之前遇到过由项目组组长管理代码改进,一旦出现项目进度很赶,账号公用,最终项目的修改人就会出现混乱,互相推诿扯皮。
gitlab的代码提交人是依照邮箱为追溯标准的
首先打开git gui的选项
关注一个如下图的地方一个就是编码要改成utf8 还有就是gitlab所记录的提交人以邮箱为准:
这里的邮箱也就是命令行里面的
git config --global user.email "zhangsan2@qq"
gitlab中记录的代码提交人与控制面板中的凭据管理器中的凭据是无关的
然后用自动化的代码审计工具进行分析后,就能把问题定责到个人,保证代码审计的落地。
但是同时在开发过程中要注意一个细节:
如下图参照gitlab在合并代码的时候不要选择合并提交, 如果合并提交的话代码提交人会变成合并人的身份,导致代码实际提交人的记录无法追溯
3. git几个要统一化的参数避免隐蔽的坑
# 保证长文件名可用
git config --global core.longpaths true
# 使用core.autocrlf 保证不同操作系统的换行符号兼容性
# 参考地址 https://blog.csdn/asahinokawa/article/details/85988837
# ide能自适应换行符 所以最好把代码的换行进行统一化
git config --global core.autocrlf input
4.fortfiy的高级java代码扫描需要把所有的maven依赖都导出来,而且要做到jar包一个不多一个不少。可以使用以下的脚本把工程中的dependency导出到集中的一个文件夹中,设置为fortify高级扫描的classpath,以下d得代码就是C:\Java\MVN_REPO中所有的jar包导出到C:\Java\mvn目录中。在使用雳鉴扫描代码时保证代码审计的时候能找到对应的依赖jar包上传到雳鉴服务器里,也可以使用下面的脚本。
@echo off
set work_path=C:\Java\MVN_REPO
cd %work_path%
for /R %work_path% %%a in (*.jar) do (
copy "%%a" C:\Java\mvn
)
pause
如果有些人提供的代码没有删除target目录,可以使用以下的bat删掉工程目录中所有的target目录以避免扫到垃圾代码。
@echo off
for /r /d %%i in (target) do (
echo %%i
rd /s /q %%i
)
然后这样使用foritfy
打开后最好设计如下的目录结构,其中maven2目录就是我们用脚本导出的jar包
当然单纯的这样目录设计是不够的,还需要将maven2这个目录设置为classpath目录
点击next后,对扫描的规则可以做设置
剩下就执行扫描就可以了
生成报告的模式如下才能和ide中一致
禁止转载!
更多推荐
java代码审计思维导图_SDL中fortify 代码审计各种坑和处理办法
发布评论