当前位置:首页 > 技术分析 > 正文内容

「终极方案」Dependency Check定时稳定更新cve数据的实现思路

ruisui883个月前 (02-03)技术分析17


在文章「干货」Dependency check配置Mysql数据库存储nvd数据

介绍了如何把nvd库中的cve信息保存到数据库中的方法!但这仍然不是最优的方案,客户端执行脚本后,仍然需要更新cve数据到数据库中,虽然稳定性会得到保障,但是依然会浪费一定时间!那么我们的终极方案是什么呢?

实现思路其实也非常简单,只需两步

步骤一、定时更新最新的cve信息到数据库

步骤二、客户端执行dependency-check时,设置较长的校验时间使其无须检测更新,直接从数据库中读取数据

这里注意,步骤一和步骤二是分开进行的,先执行cve信息的更新,然后客户端执行dependency-check,这样就能保证dependency-check执行时数据库中cve数据的即时性了!

定时更新cve

定时更新最新的cve信息到数据库

dependency-check.bat --cveStartYear 2022 --updateonly --dbDriverName com.mysql.cj.jdbc.Driver --connectionString jdbc:mysql://127.0.0.1:3306/dependencycheck --dbUser dcuser --propertyfile d:\dependency\pwd.properties

这条语句需要注意的参数有:

cveStartYear 2022 表示只更新2022年的nvd种子数据,因为我们数据库中已经有以前年份的数据了,所以通过这种形式则实现了迭代更新,会大量的缩短更新时间!注意:在dependencycheck 7.1才开始有该参数。

updateonly 表示只更新数据,不进行扫描

dbDriverName 表示数据库的dirver名称

connectionString 表示连接数据库的字符串,执行初始化脚本后创建的数据库叫dependencycheck

dbUser 是用户名,初始化的用户名叫 dcuser

propertyfile 这个参数是表示dcuser 的密码,需要在properties文件中存储,形式是:data.password=DC-Pass1337! 这个密码是执行初始化脚本后的默认密码

如果我们不需要对某种指定类型的文件进行检测分析,可以使用参数—disable*** 放弃对指定的文件类型进行分析进而提升检测效率。例如:disableRetireJS、disableNodeJS、disableNodeAudit、disableAssembly等等。

详细参数使用可以参考官方文档:

https://jeremylong.github.io/DependencyCheck/dependency-check-cli/arguments.html

详细的分析器参数含义如下图所示:

文档链接,
https://jeremylong.github.io/DependencyCheck/analyzers/index.html

定时任务更新CVE

最后我们就可以写一条定时任务,在指定的时间对cve数据库进行及时更新了!

思路一:脚本编写定时任务,具体实现方式这里不再赘述,自行百度即可。也可以参考文档
https://jeremylong.github.io/DependencyCheck/data/cachenvd.html)

思路二:通过jenkins 创建一个定时任务执行dependency-check

设置较长的cve有效检测时间

dependency-check.bat --scan ${scanProject} --format HTML --out ${project_path} --dbDriverName com.mysql.cj.jdbc.Driver --connectionString jdbc:mysql://127.0.0.1:3306/dependencycheck --dbUser dcuser --propertyfile /opt/scripts/config/pwd.properties --cveValidForHours 8800 --disableRetireJS --disableNodeJS --disableNodeAudit –disableAssembly

注意这里使用了参数--cveValidForHours 8800 ,它的定义是每8800 小时(即一年)才更新nvd数据库中的cve信息(默认是4小时)。因为我们已经实现了从数据库中读取cve信息,而数据库里的cve信息是每天都进行增量更新的,因此在客户端我们就不需要再重新发起检测cve信息的请求了,这样也就避免了客户端与定时任务更新nvd库的重复操作!

总结

最后总结一下定时稳定更新cve数据的实现的思路!

1.在jenkins 中每天执行更新cve的操作

dependency-check.bat --cveStartYear 2022 --updateonly --dbDriverName com.mysql.cj.jdbc.Driver --connectionString jdbc:mysql://127.0.0.1:3306/dependencycheck --dbUser dcuser --propertyfile d:\dependency\pwd.properties

2.客户端执行时,设置较长的cve有效检测时间

dependency-check.bat --scan ${scanProject} --format HTML --out ${project_path} --dbDriverName com.mysql.cj.jdbc.Driver --connectionString jdbc:mysql://127.0.0.1:3306/dependencycheck --dbUser dcuser --propertyfile /opt/scripts/config/pwd.properties --cveValidForHours 8800 --disableRetireJS --disableNodeJS --disableNodeAudit –disableAssembly

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/1134.html

标签: nodejs更新
分享给朋友:

“「终极方案」Dependency Check定时稳定更新cve数据的实现思路” 的相关文章

熬了整整3天,终于把Excel财务费用报销管理系统做好了,自动统计

在财务的工作中有一项很重要的工作就是报销,财务报销不仅涉及了业务招待费、差旅费、福利费、办公费等各项费用;还跟会计做账、报税相关联。每个企业都有自己的报销流程,那作为财务人员,该怎么管理财务的费用报销呢?想要高效率地管理费用报销,首先要明确报销的规范和流程,第二就是要做好报销的数据管理。把费用报销的...

Gitlab+Jenkins通过钩子实现自动部署web项目,图文详细教程

扩展参考:Jenkins+Gitlab通过脚本自动部署回滚web项目至集群 一:基础环境介绍及准备1):Gitlab服务器:ubuntu 192.168.152.131 ---参考搭建:Linux安装gitlab,docker安装gitlab教程2):Jenkins服务器:ubunu 192.168...

掌握版本控制:Git的那些常见用法与技巧

Git作为现代开发中最常用的版本控制系统,它的普及和高效性使得程序员几乎每天都在与它打交道。无论是个人项目,还是团队协作,Git都能帮助我们追踪代码的修改历史,保证代码版本的管理井井有条,并在多人协作时有效地避免冲突。本文将分享一些常见的Git用法与技巧,帮助你更好地掌握Git的强大功能,并提升你在...

内存问题探微

这篇文章是我在公司 TechDay 上分享的内容的文字实录版,本来不想写这么一篇冗长的文章,因为有不少的同学问是否能写一篇相关的文字版,本来没有的也就有了。说起来这是我第二次在 TechDay 上做的分享,四年前第一届 TechDay 不知天高地厚,上去讲了一个《MySQL 最佳实践》,现在想起来那...

HTML5+眼球追踪?黑科技颠覆传统手机体验

今天,iH5工具推出一个新的神秘功能——眼动追踪,可以通过摄像头捕捉观众眼球活动!为了给大家具体演示该功能的使用,我做了一个案例,供大家参考。实际效果如下:案例比较简单,就是通过眼动功能获取视觉焦点位置,剔除用户看中的牌。现在,舞台的属性中多了一个“启用眼动”的选项,另外,还多了一个“启用摄像头”的...

JS数组过滤元素的方法

引言JavaScript 作为前端开发的核心技术之一,在现代 Web 开发中扮演着举足轻重的角色。随着 Web 应用越来越复杂,高效处理数据集合的需求日益凸显。本文旨在介绍 JavaScript 中数组过滤的基础知识及其在实际项目中的应用技巧。技术概述定义数组过滤是 JavaScript 提供的一种...