仓库源文站点原文


title: github仓库中的隐私信息处理 slug: point_4 date: 2023-10-29 02:30:00+0800 image: github.png categories:

- techStudy

tags:

- Git
- Github
- ComputerNetworkSecurity
- point

weight: 1 # You can add weight to some posts to override the default sorting (date descending)

comments: true

license: flase

math: true

toc: true

style:

keywords:

readingTime:


问题

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

原因

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

解决方案

  1. github action secret加密隐私信息

利用github提供的github action secret功能,将token等信息保存在secret中,然后在workflow中调用secret中的信息。

以我的个人博客为例,由于个人博客中的gitalk评论区插件需要依赖github outh app,因此需要在workflow中调用github action secret中的token信息。

相关数据保存在config/_default/params.toml文件中。


...

repo = "lihan3238.github.io"
clientID = "1eda156wa"
clientSecret = "5168165"

...

注意到,文件中的隐私信息是明文保存的,任何访问者都能直接看到,很危险。 隐私信息

首先将原文替换为特定字符串

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中添加进行替换的代码

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包,然后在本地仓库目录下命令行中运行命令

java -jar [bfg.jar的绝对路径] --delete-files [要删除记录的文件名(不用地址)]
# 强制更新远程仓库
git push --force