나는 PHP의 CodeIgniter 3를 주로 써왔었다. CodeIgniter 3에서는 데이터베이스 정보를 database.php
파일에 직접 작성하는데, 이 파일을 원격 저장소에 public로 올리는 과정에서 보안 이슈가 있었다. Git에 대해 잘 모를 때는 .gitignore
파일에 해당 파일을 추가하기만 하면 된다고 생각했다. 하지만 .gitignore
에 추가하는 것만으로는 충분하지 않았다. 이미 커밋된 히스토리에서도 해당 파일을 삭제해야 했다.
그리고 얼마 후, git reflog
를 사용하면 hard reset
된 커밋도 복구할 수 있다는 사실을 알게 되었다. 그래서 “원격 저장소에서도 reflog
를 사용해서 데이터베이스 정보를 복구할 수 있지 않을까?”라는 의문이 들었다. 결론적으로, 복구할 수 없다. 그 이유는 아래의 2가지이다.
git reflog
는 로컬 저장소에서만 사용되며, 원격 저장소에는 기록되지 않는다.git filter-branch
명령어로 삭제된 히스토리는reflog
로도 복구할 수 없다.
알면 알수록 무서운 도구라는 생각이 들었었고, 그 후 모두 private로 변경하였었다.
public으로 바꾸기 위한 방법 몇 가지가 있다.
우선 모두 선행 과제는 .env파일로 민감한 정보를 관리할 수있게 변경하는 것이다.
- 데이터베이스 비밀번호를 바꾸고, 원격 저장소를 public으로 변경한다.
- git 히스토리에서 비밀번호를 검색해서 해당하는 파일을 모두 지운다.
- 모든 히스토리를 지우고 새로 올린다.
나는 3번째 방법으로 진행하고 있다. 나는 github를 백업용 저장소로 사용하고 있었기 때문에 .env파일을 함께 올릴 필요도 있었고, public 레포지토리와 private 레포지토리를 분리해야했다.
변경내용을 볼 수 있도록, 프레임워크 기본파일을 커밋 후에 추가 커밋하고 있다.
#참고