Background
你可能常常会在你的某一个Github repo上发现这样的alert
这是Github给你发送的
Dependabot alerts
。
What is Dependabot?
Github Dependabot 是一个github的工具,他可以帮助你检测你的repo, 并且做一些工作保证你repo的安全性。Dependabot可以为你repo做的事情主要分成三大类:
- Keep all your dependencies updated: 实时检测你的repo,并keep你所有的dependency都能被updated
- Detection of vulnerable dependencies send Dependabot alert:检测vulnerable dependencies并发出Dependabot alert
- Stop using vulnerable dependencies and keep security updates: 帮助你停止使用有vulnerable的dependencies
Keep all your dependencies updated
Dependabot除了可以帮助我们处理漏洞以外,还有一个非常重要的作用,就是帮助我们检测我们所使用的dependency中是否有可以更新的版本,如果有,它也可以帮助我们实现自动更新。
在repo中enable了Dependabot之后,可以时刻的保证我们repo中使用的dependency都是up to date的
Detection of vulnerable dependencies
Github会检测vulnerable dependencies,如果发现就会发出Dependabot alerts
, 这种检测机制在以下几种情况下被触发:
- 当GitHub Advisory Database中又收录了一个新的
vulnerability
GitHub Advisory Database中包含了所有目前发现的vulnerability。Github也为了方便开发者查询vulnerability而开发了一UI github.com/advisories, 这里你可以浏览或搜索影响GitHub上开源项目的漏洞。
- 来自WhiteSource的新的vulnerability被处理
WhiteSource DB也是一个用于存储open source security vulnerabilities的DB
- repo中添加了新的dependency或者升级了某一个dependency的版本,或者说dependency graph发生了改变。
默认情况下,Github会检测所有的public repo,当发现漏洞的时候alert仓库的维护者,alert中会包含被影响的文件link,以及漏洞修复的版本和信息。
对于一些private repo就需要维护者手动的enable dependency graph
和 GitHub Dependabot alerts
对于那些enable Dependabot security updates
的仓库,Dependabot会自动的将漏洞修复,并且给你的仓库提PR。
Stop using vulnerable dependencies: Dependabot security updates
当你的repo enable Dependabot security updates
之后,Github会找到没有漏洞的版本,将漏洞修复,并且给你的repo提一个PR
你的repo就可以实现自动的security updates
How to use Dependabot ?
Dependabot的检测功能对于public repo是默认开启的,如何开启我已经在上面提过了,这部分主要会说明如何配置Dependabot
的自动update。
如果想要Dependabot帮你做security updates
,你需要两个步骤:
-
在repo中首先enable
Dependabot security updates
-
在repo根目录下创建
.github
folder,并且在folder下添加dependabot.yml
(dependabot的config)这个config主要配置:
-
那些漏洞需要被自动修复
-
多久进行一次自动修复工作
-
# Basic dependabot.yml file with
# minimum configuration for two package managers
version: 2
updates:
# Enable version updates for npm
- package-ecosystem: "npm"
# Look for `package.json` and `lock` files in the `root` directory
directory: "/"
# Check the npm registry for updates every day (weekdays)
schedule:
interval: "daily"
# Enable version updates for Docker
- package-ecosystem: "docker"
# Look for a `Dockerfile` in the `root` directory
directory: "/"
# Check for updates once a week
schedule:
interval: "weekly"
复制代码