Django에서 비밀 키를 사용하면 사용자 세션 관리를 용이하게 하고, CSRF(Cross-Site Request Forgery) 공격으로부터 보호하며, 암호화 서명 및 기타 프로세스의 생성 및 검증을 통해 민감한 정보를 보호하므로 애플리케이션의 보안을 보장하는 데 매우 중요합니다.
이 키가 노출되면 애플리케이션의 보안을 위협하는 악의적인 사이버 공격이 발생할 수 있으므로 프로젝트와 관련된 비밀 키가 기밀로 유지되고 무단 액세스로부터 보호되어야 합니다. 비밀 키가 유출된 경우 애플리케이션의 피해를 최소화하기 위해 대체 키를 생성하는 프로세스를 이해하는 것이 중요합니다.
Django 비밀 키가 어떻게 노출될 수 있나요?
Git 또는 이와 유사한 리포지토리에 커밋을 통해 Django 비밀 키를 실수로 공개하는 것은 아직 GitHub의 복잡한 기능에 익숙하지 않은 초보 개발자가 저지르는 흔한 오류입니다. 이러한 경우 다음 중 한 가지 해결 방법을 선택할 수 있습니다:
추가 검토 결과, 앞서 언급한 커밋을 프로젝트 리포지토리에 포함하지 않기로 결정했습니다.
“기밀 키를 완전히 삭제할 것을 제안합니다.
커밋 기록의 잔여 복사본이 GitHub 캐시 또는 기타 분산 네트워크에 저장되어 있을 수 있으므로 커밋을 삭제하는 것이 현명하지 않을 수 있습니다. 이러한 상황을 고려할 때, 예방 조치로 비밀 키가 유출되었다고 가정하는 것이 현명할 것입니다.
유출된 비밀 키를 대체할 새로운 비밀 키를 생성해야 하며, 환경 변수를 활용하여 안전하게 보호하는 것이 좋습니다. 또한, 사이트 간 요청 위조(CSRF) 공격과 같은 잠재적인 위협으로부터 애플리케이션의 보안을 보장하려면 Django에서 새로운 비밀 키를 생성하는 프로세스를 이해하는 것이 중요합니다.
장고에서 새 비밀 키를 생성하는 방법
장고 프레임워크는 `get_random_secret_key()`라는 함수 속성을 제공하여 매번 새로운 비밀 키를 생성할 수 있도록 합니다. 이 함수는 파이썬의 비밀 모듈의 기능을 사용하여 50자로 구성된 강력한 비밀 키를 생성하는 실용적인 구성 요소 역할을 합니다.
python manage.py shell -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
주어진 명령은 `django.core.management.utils` 모듈에서 `get_random_secret_key()` 함수를 가져온 후 프로젝트 내에서 활용하기에 적합한 50자 길이의 새로운 임의 비밀 키를 생성하고 출력합니다.이 명령을 실행하기 전에 프로젝트의 루트 디렉토리에 있어야 하며, 프로젝트 내 `manage.py` 파일의 위치에 해당해야 합니다.
파이썬 스크립트를 생성하고 앞서 언급한 코드 조각을 복사하여 그래픽 사용자 인터페이스를 넘어 동일한 명령을 실행할 수 있습니다.
# import the get_random_secret_key() function
from django.core.management.utils import get_random_secret_key
secret_key = get_random_secret_key()
print(secret_key)
프로그램을 실행할 수 있습니다
python fileName.py
앞서 언급한 지시어는 지정된 프로젝트 내에서 활용할 수 있는 50자 길이의 혁신적인 암호화 키를 생성하고 표시하도록 설계되었습니다.
환경 변수로 비밀 키를 보호하는 방법
GitHub 커밋할 때마다 비밀 키를 변경하는 것은 현명하지 않습니다. 비밀 키를 안전하게 보호하는 방법 중 하나는 환경 변수를 활용하는 것입니다. 환경 변수는 소스 코드 리포지토리 외부에서 설정할 수 있지만 소프트웨어가 실행되는 동안에도 액세스하여 사용할 수 있는 설정입니다. 이러한 매개변수에는 일반적으로 구성, API 키, 데이터베이스 자격 증명 등이 포함됩니다.
환경 변수는 “.env”라는 이름의 파일에 저장할 수 있으며, “.gitignore”로 지정된 파일을 사용하여 Git 리포지토리에서 해당 변수의 존재를 제외할 수 있습니다. 이는 .gitignore 파일 내에 목록을 생성하여 Git이 따르지 않을 파일과 디렉터리를 지정하여 수행할 수 있습니다.
파일 유형과 디렉터리 구조는 프로젝트마다 다르지만 각 언어에 적용할 수 있는 합리적인 기본값이 있습니다. GitHub의 gitignore 리포지토리 에서 .gitignore 템플릿 목록을 찾을 수 있습니다. 다음 단계는 Django에서 환경 변수와 함께 .gitignore 파일을 사용하는 방법을 보여줍니다.
.gitignore 파일 만들기
기본 디렉토리(manage.py 파일의 위치)에 .gitignore 파일을 만들고 이 GitHub 파일 의 내용을 여기에 복사합니다. 이 파일은 리포지토리에 넣지 않아도 되는 일반적인 파일을 제외한 Python 프로젝트용 샘플 .gitignore 파일입니다.
먼저 ‘Add.gitignore’ 기능에 액세스하고, 검색창을 탐색하여 ‘Python’을 찾은 다음, 표시되는 옵션 목록에서 원하는 프로그래밍 언어를 선택합니다.
.env 파일 만들기
프로젝트의 루트 디렉터리 내에 ‘.env’라는 이름의 파일을 만듭니다. 이 파일은 모든 환경 변수를 저장하는 역할을 합니다.
SECRET_KEY=x#)_v1dtrlqvc61*025t^u4*-2h^kq&fmaw-ifgkppjxpyhh1%
다음 패턴에 따라 비밀 키를 복사하여 이 파일에 붙여넣으세요(따옴표와 공백을 모두 제거). “.env” 파일이 .gitignore 목록에 있는지 확인하세요.없는 경우 파일 내 빈 줄에 파일 이름을 별도의 항목으로 삽입하여 목록에 추가해 주세요.
.env
python-dotenv 패키지 설치
명령줄 인터페이스를 열고 필요한 단계를 실행하여 프로젝트의 종속성 내에 python-dotenv 라이브러리가 필수 구성 요소로 추가되었는지 확인해주세요.
pip install python-dotenv
settings.py 파일 수정
Django의 다양한 기능을 활용하기 위해서는 settings.py 파일 내에 특정 패키지를 통합해야 합니다. 이러한 패키지는 강력하고 효율적인 웹 애플리케이션을 구축하는 데 필수적인 다양한 기능을 제공합니다.
import os
from dotenv import load_dotenv
a.env 파일에서 settings.py 파일로 환경 변수 로드를 구현하는 것은 해당 파일 내의 `load_dotenv()` 함수를 사용하여 수행할 수 있습니다.
load_dotenv()
주어진 코드 줄의 자리 표시자 “SECRET\_KEY”를 고유하고 안전한 비밀 키로 바꿉니다. 이 작업은 임의의 문자열을 생성하거나 암호화 알고리즘을 사용하여 쉽게 추측할 수 없는 키를 생성하여 수행할 수 있습니다. 사용되는 정확한 방법은 애플리케이션의 특정 보안 요구 사항과 민감한 데이터에 필요한 보호 수준에 따라 달라집니다.
SECRET_KEY = os.environ.get('SECRET_KEY')
앞서 설명한 구성의 기능을 확인하기 위해 다음 명령을 사용하여 개발 서버를 실행할 수 있습니다: 이 서버를 실행하면 성공적으로 실행되는 것으로 확인된 것처럼 프로젝트가 올바르게 작동할 것으로 예상됩니다.
python manage.py runserver
환경 변수를 사용하여 비밀 키를 안전하게 보관
비밀 키를 표시하면 개발자에게 불리한 결과를 초래할 수 있으며, 특히 라이브 환경에서 사이버 공격이 발생했을 때 프로젝트를 검색하는 경우 더욱 그렇습니다.
부정적인 결과를 피하려면 비밀 키를 환경 변수 내에 보관하고 a.gitignore 파일을 사용하여 Git 리포지토리에서 제외하는 것이 필수적입니다.