安全很重要,但实际工作中,大家不知不觉会忘记它。我希望通过这篇文章,用上我介绍的工具,你能对安全问题更重视,也更好的规避库的安全漏洞。
作为一个 Go 开发人员,安全问题一样得重视。如果你使用 VSCode,推荐给你一个免费的插件,它能够方便的将有风险的 Go Module 及时告诉你。
这个插件就是 JFrog,在 VSCode 中搜索安装。它能将当前项目使用的公开依赖的实时漏洞信息从 JFrog GoCenter[1] 的元数据中直接引入到源代码编辑器中。这意味着你在首次构建之前就能看到开源 Go 模块的潜在风险,并做出更好的选择。
VSCode 已成为许多 Go 开发人员的首选源代码编辑器,包括 JFrog 的一些开发人员。它是为 JFrog Xray 客户提供的针对流行 IDE[2] 的几种 JFrog 集成之一,使开发人员更容易理解开源依赖的风险,并有助于保持对安全的警惕。
为了帮助实现使软件开发和交付更快、更安全和更可靠的使命,JFrog 将 VSCode 扩展提高到了一个新水平。通过利用 GoCenter 中可用的 Go 模块漏洞数据,即使没有 Xray 许可实例,VSCode 用户也可以从中受益。
安装扩展程序后,有两种方式查看项目中的漏洞。
安装了 JFrog 扩展后,在 VSCode 编辑器左侧会出现一个按钮:
点击它,会看到如下的界面:
在左侧看到了一些问题:有叹号,中等级别的漏洞。
咦?echo 框架竟然有漏洞?于是点开它左侧的 > :
原来是 golang/x/text 包有漏洞。但具体什么问题不清楚。同时我们发现该包最新的版本是 v0.3.4。
将鼠标悬停在 go.mod 文件中的模块上时,即可在 VSCode 中查看所有这些信息。
同时依赖底部的黄色波浪线也表明有问题。
你可以从 go.mod 中的模块直接跳至树状视图(鼠标停留在某个依赖,左侧会出现一个黄色小灯泡),并支持从树中跳转至 go.mod 中的模块定义。图中红框部分就是做这种跳转。
点击小灯泡,出来的菜单还可以直接跳转到 GoCenter 网站。关于 GoCenter 的一些相关信息,以后再介绍。这里简单提一句,在 GoCenter 网站,点击 “Security” 标签下查看有关该模块的更多信息。
也可以看到 golang/x/text 有漏洞。
但怎么看到具体漏洞信息呢?通过 GoCenter,找到有问题的包,比如这里是上面的 golang/x/text 包,对应 0.3.0 或 0.3.2 都行。在 Security 标签下,可以看到漏洞描述:
这个漏洞大意是:在 0.3.3 版本之前,x/text 包在编码/解码方面存在漏洞,可能导致 UTF-16 解码器进入无限循环,导致程序崩溃或内存耗尽。如果调用解码器上的 String 函数,或者解码器传递到
golang/x/text/transform.String,攻击者可以为使用 UseBOM 或 ExpectBOM 实例化的 UTF16 解码器提供单个字节来触发无限循环。
切换到 0.3.3 发现确实没有漏洞了。因此我们项目中应该升级该库的版本。
这里有一个小问题。比如上面提到的
github/polaris1119/go-echo-example 项目,golang.org/x/text 库在这个项目中被很多库依赖,而且不同库依赖的版本还不一样,而且有些库的最新版本依赖的 golang.org/x/text 还是 0.3.2,比如 locales 库的 go.mod
github/go-playground/locales/blob/v0.13.0/go.mod,依赖的还是 0.3.2。所以即使更新了相关的库,VSCode 上 JFrog 插件还是提示有漏洞。但实际上已经没有问题了,你可以试试删除掉 golang.org/x/text v0.3.3 以下的版本(在 $GOPATH/pkg/mod 下面),然后编译项目,是否能成功过。
希望本文能够让你重视项目安全问题,重视 go module 的安全。
此外,Jfrog 的 VSCode 扩展还可以使用在其他语言项目中。例如 Maven,Gradle,npm,NuGet,RubyGems 和 PHP Composer 等。