<small id='QfxOhCtl3'></small> <noframes id='EnUprdA'>

  • <tfoot id='trjsP'></tfoot>

      <legend id='OGtDqHT'><style id='E0v2'><dir id='KhOjfdP2p'><q id='wB8D'></q></dir></style></legend>
      <i id='BeAzd7bW5'><tr id='MtoSywKA'><dt id='ImDL'><q id='gt1erBx94'><span id='ixu4PNjYp'><b id='zyViDECgb'><form id='9s2NA5vT'><ins id='gGLPzB'></ins><ul id='dQofWwtJ4'></ul><sub id='h0tM5kI'></sub></form><legend id='ajfhw3'></legend><bdo id='UAYS'><pre id='thom'><center id='VqLFgzj'></center></pre></bdo></b><th id='5JTDsnWL'></th></span></q></dt></tr></i><div id='ikyQZYb'><tfoot id='W8bp'></tfoot><dl id='rM97x3b8'><fieldset id='5b8eLO'></fieldset></dl></div>

          <bdo id='HvSK36EXf'></bdo><ul id='LJEnFd'></ul>

          1. <li id='BSYTJXK7x1'></li>
            登陆

            怎么删去GIT库房中的灵敏信息

            admin 2019-11-22 146人围观 ,发现0个评论

            正常Git库房中应该尽量不包括数据库衔接/AWS帐号/巨大二进制文件,不然一旦走漏到Github,这些十分灵敏信息会影响客户的信息安全现已公司的诺言。公司或许其它还有相关规则,如制止私家邮件参加GIT库房。假如违背这些规则,或许会面对解雇、高额罚款、或牢狱之灾等十分严峻的赏罚。

            由于Git的正常操作流程,导致灵敏信息一旦进入主分支,再怎样在新的Pull Request中删去,也力不从心了。其它人都能在前史记载中查询到前史记载中的装备中国电信营业厅。所以这要求对Git的签名和签入、推送要有高度的敬畏之心。

            但是依据墨菲规律,或许发作的作业一定会发作。时不时,成心或失手,就会有人将这些信息写到了Git库房中。假如代码还没有上传(git push),那或许还好说,只需将分支删去,然后从头写一下功用即可。但假如现已上传了,或功用太多太仿制没办法及时删去,就会后悔莫及了。

            这儿我将演示一个成心写满“灵敏信息”的Github库房,然后一步一步演示怎样在前史记载中,删去“灵敏信息”,以完结“脱敏”。

            库房需处理的问题阐明:

            这个演示满载“灵敏”信息的代码库房,能够从:https://github.com/sdcb/sensitive-repo-demo 这儿下载。

            “灵敏”信息演示:

            • 个人邮箱签入“公司”项目,能够经过gitk指令看到:


            • AWS Key装备写在代码中(见Program.cs):
             string awsAccessKey = "pwiCZSMCIcM6+q+h";
            string awsSecretKey = "861YUaeCHqzaS5OX+OmAK1XD37kmQhA2";
            Console.WriteLine("Hello, I Switched to correct email!");
            • 出产环境装备文件(见appsettings.Production.json):
             {
            "ConnectionString": "Data Source=production-db.starworks.cc,32768; User Id=sensitive_user; Password=MyVeryVerlyStr0ngPassw0rd!; Initial Catalog=ProductionDB; app=Program1"
            }
            • 灵敏信息文件夹(见userSecrets文件夹)
            • 大二进制文件(见bin\Program.exe)

            从以上灵敏信息的诚心,可见小编(周杰的DotNet骚操作)为了写这遍文章现已拼了。

            怎么删去灵敏信息

            前置条件

            有必要先切换到主分支(一般为master),然后获取最新代码再进行操作:

            git checkout master
            git pull

            假如有任何修正的目标,都会阻挠提交,因而有必要先签入一切未提交的本地修正。

            git filter-branch——删去邮箱/用户名

            该指令用于处理将个人邮箱/个人用户名签入公司项目。

            该指令是Git客户端内置的,不必下载。

            bfg——删去其它信息

            bfg(BFG Repo-Cleaner)是个强壮的东西,有如下功用:

            • 用于删去文件内灵敏信息(不删文件)
            • 删去灵敏文件
            • 删去灵敏文件夹
            • 删去大二进制文件。

            bfg依据Java,装置很繁琐,但经过choco指令,能够快速进行装置:

            1. 先在指令提示符(cmd)下履行如下脚本,装置choco(Chocolate怎么删去GIT库房中的灵敏信息y):
            @"%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'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
            1. 再运用choco指令装置bfg东西(需求管理员权限):
            choco install bfg-repo-cleaner
            1. 期间,它会主动下载JRE等组件,履行作用如下(需求按屡次Y/Yes):


            1. 要点:履行此指令需求以管理员权限运转cmd。

            履行指令,删去灵敏信息

            删去个人邮箱签入“公司”项目

            履行如下指令怎么删去GIT库房中的灵敏信息即可:

            git filter-branch --env-filter '
            OLD_EMAIL="sdflysha@qq.com"
            CORRECT_NAME="sdflysha"
            CORRECT_EMAIL="sdflysha@starworks.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项sdflysha@qq.com替换为你的私家(过错)邮箱;
            • 将CORRECT_NAME和CORRECT_EMAIL换成你的公司(正确)邮箱;
            • 该指令不能在指令提示符(cmd)中运转,由于cmd不支持换行指令,不然会呈现如下过错:


            假如履行正常,将会呈现:

            此刻,运转gitk指令将看到:

            可见,一切“私家邮箱”sdflysha@qq.com都正确地替换成为了“公司邮箱”sdflysha@starworks.cc了。

            替换文件中的灵敏信息(不删去文件)

            指令:

            bfg --replace-text "C:\Users\sdfly\Desktop\to-be-replaced.txt" --no-blob-protection

            其间to-be-replaced.txt格局如下:

            pwiCZSMCIcM6+q+h==>REPLACED
            861YUaeCHqzaS5OX+OmAK1XD37kmQhA2==>REPLACED

            其间左面是需求替换的值(这儿为AWS相关的key),右边为替换之后的值。

            指令履行后,能够运转gitk,能够看到前史记载中,东西真的被替换了:

            删去灵敏文件

            指令:

            bfg --delete-files appsettings.Production.json --no-blob-protection

            将其间appsettings.Production.json文件替换成你的文件名即可。

            留意:删去文件怎么删去GIT库房中的灵敏信息不能带路径名,只能匹配文件自身。

            删去灵敏文件夹

            指令:

            bfg --delete-folders userSecrets --no-blob-protection

            将userSecrets文件夹替换成你的灵敏文件夹即可。

            删去二进制大文件

            指令:

            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?`

            关于--no-blob-protection

            --no-blob-protection是指将前史中删去的记载,放到最新一次未签入的修正中:

            PS C:\Users\sdfly\Desktop\sensitive-repo-demo> 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 ..." 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 --hard

            推送到长途/其他人获取代码

            此刻能够经过:

            git push --set-upstream origin master --force

            来推送到长途以完结(该指令或许需求你的上级帮你履行,或暂时开个权限)。

            留意,简略地履行git push(不带--force)是无法推送的,此刻会报如下过错:

            组内其它成员则能够删去原先的主分支,然后从头拉一个主分支:

            git fetch origin
            git checkout -b temp-branch
            git branch -D master
            git checkout origin/master
            git checkout -b master

            最终的作用

            (已脱密)https://github.com/sdcb/sensitive-repo-demo/tree/cleaned

            比照:

            (原版)https://github.com/sdcb/sensitive-repo-demo

            总结

            咱们签入Git时应该小心翼翼,但一旦呈现问题,只需引起注重,也是能够尽早弥补的。上述这些指令或许会中止其它组员的作业,因而一旦呈现问题应该尽早报告给上级,大概率需求上级来合作来康复Git的运用。

            当然,进步信息安全意识才是最重要的,事后诸葛亮是费力不讨好。期望各位进步警觉,不要在Git的运用中翻车。

            来历:https://www.cnblogs.com/sdflysha/p/20190804-delete-sensitive-info-in-git-repository.html

            请关注微信公众号
            微信二维码
            不容错过
            Powered By Z-BlogPHP