-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
优化容器化执行扫描时漏洞库下载与缓存持久化相关逻辑 #39
Comments
请问更推荐哪种方案呢?我可以尝试先改一版 @cnlkl |
1. 挂载参数配置 可以像方案二提到的支持为不同扫描器单独配置挂载参数,这里需要同时支持在k8s和docker中挂载存储 每次启动扫描容器时根据配置挂载存储到容器内,比如固定挂载到目标目录 2. 漏洞库更新方式 不适合放在服务内实现,因为不同扫描器的漏洞库更新方式不一样,单独一个定时任务处理与分析服务完全解耦会更好 因为离线扫描环境不一定能访问外网,本身就需要一个定时任务更新漏洞库到离线环境可访问的位置,可以在这个定时任务中更新漏洞库到要挂载的源目录 这里提到的定时任务可以用任意方式实现,不将这块逻辑放在分析服务或工具代码中 |
明白,确实放在外部实现会更好,存储离线漏洞库服务器可能也没有合适接口去查询漏洞库的更新时间、sha256等信息,由第三方在自己的定时脚本中处理更方便。 // 检查目标数据目录是否存在指定数据文件列表, 如果任一指定文件不存在, 则删除目标数据目录
func existPersistData(dstDir string, filenames []string) bool {
for _, filename := range filenames {
filePath := filepath.Join(dstDir, filename)
fileInfo, err := os.Stat(filePath)
if err != nil {
Info("File %s does not exist\n", filePath)
removeAllFiles(dstDir)
return false
}
Info("File %s exists with size %d bytes and mode %s\n",
filePath, fileInfo.Size(), fileInfo.Mode().String())
}
return true
}
func removeAllFiles(dstDir string) {
err := os.RemoveAll(dstDir)
if err != nil {
fmt.Printf("Error removing directory %s: %s\n", dstDir, err.Error())
}
} |
@myqonnt 不需要修改sdk代码,但是要调整扫描器代码,把漏洞库和缓存的存放目录改成挂载到容器中的路径 |
ci-repoAnalysis/dependency-check/pkg/scan_executor.go
Line 35 in e1b085c
方案 1:将离线扫描相关配置的处理逻辑改为由服务端处理,包括校验是否需要更新等,即由服务下载漏洞数据后挂载到执行容器上,移除镜像中下载漏洞数据的逻辑
-v {workDir}/persist/{scanner}/{version}/data/:/usr/share/dependency-check/data:rw
方案 2:服务端默认添加一个数据目录挂载参数,无论是否为离线扫描都挂载,在下载漏洞数据之前先判断数据目录下是否已有漏洞库,校验是否需要更新等,
-v {workDir}/persist/{scanner}/{version}/data/:/usr/share/dependency-check/data:rw
两种方案容器执行完不清除数据目录,或者只清理扫描产生的 cache等文件
The text was updated successfully, but these errors were encountered: