解决问题最常用的办法就是升级组件,升级到解决了问题的组件版本,但是实际过程中往往会遇到各种各样的问题,记录一二。
- perl-IO被识别为perl
产品中并没有安装perl组件,安装了perl相关的perl-IO,perl-Errno组件,但是被Black Duck识别为perl。通过perl --version可以看到perl的版本为5.28.2,通过rpm -qa可以看到perl-IO的版本为1.39-436.fc30,结果在扫描结果中没有perl-IO的组件,多了一个版本为1.39-436.fc30的perl组件。
在论坛中提问,没有应答,只好自寻出路。好在分析发现产品中perl组件并非必须,通过卸载组件的方式解决。 - rsync中扫描出zlib?
发现一个组件:zlib 1.2.8,对应的文件为rsync。怀疑是rsync链接了zlib的库,链接的是1.2.8版本的库。下载源码果然如此。使用最新版本重新编译问题解决 - DISPUTED
有些问题是误报,比如CVE-2019-9193:
** DISPUTED ** In PostgreSQL 9.3 through 11.2, the "COPY TO/FROM PROGRAM" function allows superusers and users in the 'pg_read_server_files' group to execute arbitrary code in the context of the database's operating system user. This functionality is enabled by default and can be abused to run arbitrary operating system commands on Windows, Linux, and macOS. NOTE: Third parties claim/state this is not an issue because PostgreSQL functionality for ?COPY TO/FROM PROGRAM? is acting as intended. References state that in PostgreSQL, a superuser can execute commands as the server user without using the ?COPY FROM PROGRAM?. Furthermore, members in 'pg_read_server_files' can run commands only if either the 'pg_execute_server_program' role or superuser are granted.
- xerces包识别为低版本
产品中把所有用到的第三方组件打包成一个jar包,其中用到的xercesImpl包为2.12.0版本,单独扫描该jar包版本可以正常识别,一旦跟net.sourceforge.nekohtml:nekohtml一起打包就会识别为低版本2.1.0(反复试验,最后定位到就是几个类:HTMLComponent.class,HTMLConfiguration.class,HTMLConfiguration$ErrorReporter.class,不知道Black Duck是怎么识别的)。最后只好把这个引起冲突的jar包单独作为一个jar提供,不打到统一的jar包中。
另外需要说的是jdk中的rt.jar也会识别出xerces-j的低版本2.7.1,这个目前就没有什么办法了,动jdk就有点动作太大了。
总结:
- 解决问题最常用的办法就是找到可以解决问题的版本,升级上去,当然也不是越新越好,还是要考虑版本兼容性,尽量在小版本上升(比如springboot,当前用的是4.x.x版本就尽量在4.x.x上解决问题,不要升到5.x.x以免接口变动太大)
- 解决问题最有效的办法是:卸载掉有问题的组件,一劳永逸。当然得确认相应的组件在发布产品中用不到。听起来似乎不可取,但实际上我们的产品在这方面有很大的潜力,有很多开发期的内容会流落到发布产品中去。实际上这应该是第一步需要考虑的,如果能够删除,益处多多。