[Django 4] Django settings.py의 SECRET_KEY 초기 보안 설정

[Django 4] Django settings.py의 SECRET_KEY 초기 보안 설정

이번에는 settings.py 파일에 있는 SECRET_KEY의 보안 설정을 살펴보기로 한다.

저번 포스트의 호흡이 길었던 거 같아서 이번 건 조금 짧게 다루는 걸로 ㅎ_ㅎ

저번 포스트에서 testproject/testproject/settings.py에 있는 내용을 살펴보면 아래와 같이 SECRET_KEY가 있다.

Django에서 무작위로 생성한 보안 키 값으로 보안이 중요한 프로젝트에서는 절대...

외부에 공개하면 안된다!

https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-SECRET_KEY ...공식 문서에서도 권고한다.

...즉 이렇게 하면 안 된다는 말이다.

이 SECRET_KEY 값을 다루는 방법은 많지만 대게 .json 파일로 분리하여 관리한다.

진행시켜.

아래와 같이 프로젝트 폴더 내에 .json 확장자로 파일을 생성한다.

그 다음 SECRET_KEY 값을 복사하여,

아래와 같이 json 형식을 지켜 내용을 구성한다.

(아래처럼 "더블 쿼테이션"과 :(콜론)을 잊지 말자)

그리고 비게 된 SECRET_KEY의 자리에 아래와 같이 코드를 추가한다.

import json

from django.core.exceptions import ImproperlyConfigured

secret_file = os.path.join(BASE_DIR, 'secrets.json')

with open(secret_file) as f:

secrets = json.loads(f.read())

def get_secret(setting, secrets=secrets):

try:

return secrets[setting]

except KeyError:

error_msg = "Set the {0} environment variable".format(setting)

raise ImproperlyConfigured(error_msg)

SECRET_KEY = get_secret("SECRET_KEY")

이렇게 하면 일차적으로 SECRET_KEY를 감춘 것이다.

( TMI: 정확하게는 로컬에 저장되어 있지만, 이를 읽어오는 방식으로 변경하여 코드 상의 노출을 없앴다. )

runserver를 시켜 정상적으로 동작하는지 확인하자. 전과 같이 동작하면 처리가 잘 된 것이다^^

혹시나 개발할 때 git을 사용한다면,

.gitignore를 만들고, secret.json 키워드를 등록하여

git에 push를 넣을 때 json 파일이 따라가지 않도록 막아주도록 하자.

아래는 Django에서 숨겨야 하는 모든 파일이나 값들을 모아둔 Gitignore 리스트이다.

https://www.toptal.com/developers/gitignore/api/django

필요에 따라 리스트를 잘 뽑아내어 사용하도록 하자.

실수로 SECRET_KEY가 노출되었다면 어쩌지?

1. 으... 개발자가 아니라 스파게티 요리사가 될 것만 같아. 과감히 프로젝트를 삭제하고 다시 시작한다.

2. 다음의 내용 따위를 구글링해보고

https://stackoverflow.com/questions/15170637/effects-of-changing-djangos-secret-key

key_generator의 방식을 이용해본다.

https://miniwebtool.com/django-secret-key-generator/

혹은 코드를 이용해서 재생성한다. https://github.com/honux77/inflearn-django/blob/master/script/genkey.py

...끼치는 영향이 아주 없는 것 같지는 않다.

(피드백 환영합니다 !)

SECRET_KEY 분리 완료

from http://veryhi.tistory.com/4 by ccl(A) rewrite - 2021-10-01 16:01:08