网站制作案例价格,我做服装设计师的 求推荐资源网站,用代码做网站,品牌网站建设专业定制1. 前言正常Git仓库中应该尽量不包含数据库连接/AWS帐号/巨大二进制文件#xff0c;否则一旦泄漏到Github#xff0c;这些非常敏感信息会影响客户的信息安全已经公司的信誉。公司可能其它还有相关规定#xff0c;如禁止私人邮件加入GIT仓库。如果违反这些规定#xff0c;可… 1. 前言正常Git仓库中应该尽量不包含数据库连接/AWS帐号/巨大二进制文件否则一旦泄漏到Github这些非常敏感信息会影响客户的信息安全已经公司的信誉。公司可能其它还有相关规定如禁止私人邮件加入GIT仓库。如果违反这些规定可能会面临辞退、高额罚款、或牢狱之灾等非常严厉的惩罚。由于Git的正常操作流程导致敏感信息一旦进入主分支再怎么在新的Pull Request中删除也无能为力了。其它人都能在历史记录中查询到历史记录中的配置。所以这要求对Git的签名和签入、推送要有高度的敬畏之心。然而根据墨菲定律可能发生的事情一定会发生。时不时故意或失手就会有人将这些信息写到了Git仓库中。如果代码还没有上传git push那可能还好说只要将分支删除然后重新写一下功能即可。但如果已经上传了或功能太多太复制没办法及时删除就会后悔莫及了。这里我将演示一个故意写满“敏感信息”的Github仓库然后一步一步演示怎么在历史记录中删除“敏感信息”以完成“脱敏”。1.1 仓库需处理的问题说明敏感源敏感原因处理方法sdflyshaqq.com个人邮箱替换为“公司”邮箱文件Program.cs文件敏感替换文件中的敏感信息文件夹userSecrets文件夹敏感删除Program.exe大二进制删除这个演示满载“敏感”信息的代码仓库可以从https://github.com/sdcb/sensitive-repo-demo 这里下载。1.2 “敏感”信息演示个人邮箱签入“公司”项目可以通过gitk命令看到AWS Key配置写在代码中见Program.csstring awsAccessKey pwiCZSMCIcM6qh;
string awsSecretKey 861YUaeCHqzaS5OXOmAK1XD37kmQhA2;
Console.WriteLine(Hello, I Switched to correct email!)生产环境配置文件见appsettings.Production.json{ ConnectionString: Data Sourceproduction-db.starworks.cc,32768; User Idsensitive_user; PasswordMyVeryVerlyStr0ngPassw0rd!; Initial CatalogProductionDB; appProgram1
}敏感信息文件夹见userSecrets文件夹大二进制文件见bin\Program.exe从以上敏感信息的诚意可见小编周杰的DotNet骚操作为了写这遍文章已经拼了?。2. 如何删除敏感信息2.1 前置条件必须先切换到主分支一般为master然后获取最新代码再进行操作git checkout master
git pull如果有任何修改的对象都会阻止提交因此必须先签入所有未提交的本地修改。2.2 git filter-branch-修改邮箱/用户名该命令用于解决将个人邮箱/个人用户名签入公司项目。该命令是Git客户端内置的不用下载。2.3 bfg-删除其它信息bfg([BFG Repo-Cleaner](https://rtyley.github.io/bfg-repo-cleaner/))是个强大的工具有如下功能用于删除文件内敏感信息不删文件删除敏感文件删除敏感文件夹删除大二进制文件。bfg基于Java安装很繁琐但通过choco命令可以快速进行安装先在命令提示符cmd下执行如下脚本安装choco([Chocolatey](https://chocolatey.org/))%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command iex ((New-Object System.Net.WebClient).DownloadString(https://chocolatey.org/install.ps1)) amp;amp; SET PATH%PATH%;%ALLUSERSPROFILE%\chocolatey\bin再使用choco命令安装bfg工具需要管理员权限choco install bfg-repo-cleaner期间它会自动下载JRE等组件执行效果如下需要按多次Y/Yes重点执行此命令需要以管理员权限运行cmd。3. 执行命令删除敏感信息3.1 删除个人邮箱签入“公司”项目执行如下命令即可git filter-branch --env-filter OLD_EMAILsdflyshaqq.com CORRECT_NAMEsdflysha CORRECT_EMAILsdflyshastarworks.com if [ $GIT_COMMITTER_EMAIL $OLD_EMAIL ] then export GIT_COMMITTER_NAME$CORRECT_NAME export GIT_COMMITTER_EMAIL$CORRECT_EMAIL fi if [ $GIT_AUTHOR_EMAIL $OLD_EMAIL ] then export GIT_AUTHOR_NAME$CORRECT_NAME export GIT_AUTHOR_EMAIL$CORRECT_EMAIL fi --tag-name-filter cat -- --branches --tags重点将上述脚本中的OLD_EMAIL项sdflyshaqq.com替换为你的私人错误邮箱将CORRECT_NAME和CORRECT_EMAIL换成你的公司正确邮箱该命令不能在命令提示符cmd中运行因为cmd不支持换行命令否则会出现如下错误如果执行正常将会出现此时运行gitk命令将看到可见所有“私人邮箱”sdflyshaqq.com都正确地替换成为了“公司邮箱”sdflyshastarworks.cc了。3.2 替换文件中的敏感信息不删除文件命令bfg --replace-text C:\Users\sdfly\Desktop\to-be-replaced.txt --no-blob-protection其中to-be-replaced.txt格式如下pwiCZSMCIcM6qhgt;REPLACED
861YUaeCHqzaS5OXOmAK1XD37kmQhA2gt;REPLACED其中左边是需要替换的值这里为AWS相关的key右边为替换之后的值。命令执行后可以运行gitk可以看到历史记录中东西真的被替换了3.3 删除敏感文件命令bfg --delete-files appsettings.Production.json --no-blob-protection将其中appsettings.Production.json文件替换成你的文件名即可。注意删除文件不能带路径名只能匹配文件本身。3.4 删除敏感文件夹命令bfg --delete-folders userSecrets --no-blob-protection将userSecrets文件夹替换成你的敏感文件夹即可。3.5 删除二进制大文件命令git gc
bfg --strip-blobs-bigger-than 150K --no-blob-protection将150K换成你的二进制文件大小即可。注意删除大二进制文件前运行git gc命令是必须的否则会报这个错Warning : no large blobs matching criteria found in packfiles - does the repo need to be packed?3.6 关于--no-blob-protection--no-blob-protection是指将历史中删除的记录放到最新一次未签入的修改中PS C:\Users\sdfly\Desktop\sensitive-repo-demogt; git status
On branch master
Your branch and origin/master have diverged,
and have 9 and 9 different commits each, respectively. (use git pull to merge the remote branch into yours) Changes to be committed: (use git reset HEAD lt;filegt;... to unstage) modified: Program.cs new file: appsettings.Production.json new file: bin/Program.exe deleted: bin/Program.exe.REMOVED.git-id new file: userSecrets/admin-password.json new file: userSecrets/user-password.json这些都是敏感信息或者大文件根据你的实际情况可以先备份一下然后删除git reset --hard4. 推送到远程/其他人获取代码4.1 推送到远程此时可以通过git push --set-upstream origin master --force来推送到远程以完成该命令可能需要你的上级帮你执行或临时开个权限。注意简单地执行git push不带--force是无法推送的此时会报如下错误4.2 其他人获取代码组内其它成员则可以删除原先的主分支然后重新拉一个主分支git fetch origin
git checkout -b temp-branch
git branch -D master
git checkout origin/master
git checkout -b master4.3 最后的效果原版https://github.com/sdcb/sensitive-repo-demo脱密版https://github.com/sdcb/sensitive-repo-demo/tree/cleaned5. 总结我们签入Git时应该小心谨慎但一旦出现问题只要引起重视也是可以尽早补救的。上述这些命令可能会中断其它组员的工作因此一旦出现问题应该尽早汇报给上级大概率要上级来配合来恢复Git的使用。当然提高信息安全意识才是最重要的事后诸葛亮是费力不讨好。希望各位提高警惕不要在Git的使用中翻车。出处微信公众号【DotNet骚操作】觉得好看请点这里↓↓↓