Featured image of post github仓库中的隐私信息处理

github仓库中的隐私信息处理

问题

在使用github仓库时,会出现有意或无意commit甚至push了包含隐私信息(密码、身份信息等)的文件。

原因

使用github action``github pages时,workflow等可能需要依赖token或密码等。 此外,即使删除了文件,但是仓库中的commit历史记录中仍然会存在,也需要进行处理。

解决方案

  1. 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(例如https://github.com/lihan3238/lihan3238.github.io/settings/secrets/actions) 添加secret,并将token等信息保存在secret中。

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:
   
    ···
  1. bfg删除历史commit中的隐私信息

bfg是一个用于清除git仓库中大文件的工具,可以用于清除历史commit中的隐私信息。

前往官网,下载bfg工具的jar包,然后在本地仓库目录下命令行中运行命令

1
2
3
java -jar [bfg.jar的绝对路径] --delete-files [要删除记录的文件名(不用地址)]
# 强制更新远程仓库
git push --force
潇洒人间一键仙
使用 Hugo 构建
主题 StackJimmy 设计