问题
在使用github仓库时,会出现有意或无意commit甚至push了包含隐私信息(密码、身份信息等)的文件。
原因
使用github action``github pages
时,workflow
等可能需要依赖token
或密码等。
此外,即使删除了文件,但是仓库中的commit
历史记录中仍然会存在,也需要进行处理。
解决方案
github action secret
加密隐私信息
利用github提供的github action secret
功能,将token
等信息保存在secret
中,然后在workflow
中调用secret
中的信息。
- 实际上,通过在workflow中增加临时修改文件的操作,也可以实现对所有文件中的隐私信息替换,而不仅是workflow目录下的文件中的隐私信息替换
。
以我的个人博客为例,由于个人博客中的gitalk
评论区插件需要依赖github outh app
,因此需要在workflow
中调用github action secret
中的token
信息。
相关数据保存在config/_default/params.toml
文件中。
1
2
3
4
5
6
7
8
|
...
repo = "lihan3238.github.io"
clientID = "1eda156wa"
clientSecret = "5168165"
...
|
注意到,文件中的隐私信息是明文保存的,任何访问者都能直接看到,很危险。
首先将原文替换为特定字符串
1
2
3
| repo = "lihan3238.github.io"
clientID = "id"
clientSecret = "cs"
|
打开https://[仓库地址]/settings/secrets/actions
(例如)
添加secret
,并将token
等信息保存在secret
中。
然后在workflow
中添加进行替换的代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| jobs:
# Update config file job
update_config_file:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Modify config file
run: |
CLIENT_ID_SECRET=${{ secrets.CLIENT_ID_SECRET }}
CLIENT_SECRET_SECRET=${{ secrets.CLIENT_SECRET_SECRET }}
sed -i "s/clientID = \"id\"/clientID = \"$CLIENT_ID_SECRET\"/" ${{ github.workspace }}/config/_default/params.toml
sed -i "s/clientSecret = \"cs\"/clientSecret = \"$CLIENT_SECRET_SECRET\"/" ${{ github.workspace }}/config/_default/params.toml
build:
runs-on: ubuntu-latest
env:
HUGO_VERSION: 0.114.0
# !!!!!!!!!记得给之后的步骤添加依赖needs,不然谁知道先执行哪个!!!!!!!!
# !!!!!!!!!要在同一个jobs里,不同步骤,好像不在一个job可能有问题
needs: update_config_file
steps:
···
|
bfg
删除历史commit
中的隐私信息
bfg
是一个用于清除git仓库中大文件的工具,可以用于清除历史commit
中的隐私信息。
前往官网,下载bfg
工具的jar包,然后在本地仓库目录下命令行中运行命令
1
2
3
| java -jar [bfg.jar的绝对路径] --delete-files [要删除记录的文件名(不用地址)]
# 强制更新远程仓库
git push --force
|