설명
하드코딩된 비밀(Hardcoded Secret)은 애플리케이션 코드 내에 암호, API 키, 인증 토큰 등 민감한 정보를 직접 포함시키는 취약성입니다. 이러한 비밀정보가 소스 코드에 하드코딩되면 코드가 유출될 경우 심각한 보안 위험을 초래할 수 있습니다.
잠재적 영향
- 비밀정보 유출: 공격자가 소스 코드를 통해 비밀정보에 접근할 수 있습니다.
- 계정 탈취: 유출된 비밀정보를 이용해 계정을 탈취할 수 있습니다.
- API 남용: 유출된 API 키를 사용해 API 남용이 발생할 수 있습니다.
해결 방법
- 환경 변수 사용: 비밀정보를 소스 코드에 하드코딩하지 않고 환경 변수로 관리합니다.
- 비밀 관리 도구 사용: HashiCorp Vault, AWS Secrets Manager 등과 같은 비밀 관리 도구를 사용하여 비밀을 안전하게 관리합니다.
- 코드 검토 및 감사: 정기적으로 코드 검토 및 감사를 통해 하드코딩된 비밀이 있는지 확인합니다.
노출된 비밀정보는 폐기하고 새 값으로 교체하세요. 환경 변수도 접근을 제한하고 로그에 기록하지 않도록 관리해야 합니다.
예시
Django
변경 전
python
# Unsafe hardcoded secret in Django settings
SECRET_KEY = 'your-hardcoded-secret-key'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'myuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
}
}
변경 후
python
# Safe secret management in Django settings
import os
SECRET_KEY = os.getenv('DJANGO_SECRET_KEY')
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.getenv('DB_NAME'),
'USER': os.getenv('DB_USER'),
'PASSWORD': os.getenv('DB_PASSWORD'),
'HOST': os.getenv('DB_HOST'),
'PORT': os.getenv('DB_PORT'),
}
}
설명:
- 변경 전: 비밀정보(SECRET_KEY, DATABASE 비밀번호 등)가 소스 코드에 하드코딩되어 있습니다.
- 변경 후: 환경 변수에서 비밀정보를 읽어와 설정하도록 하여 소스 코드에 비밀정보가 남지 않도록 합니다.
Flask
변경 전
python
# Unsafe hardcoded secret in Flask configuration
class Config:
SECRET_KEY = 'your-hardcoded-secret-key'
SQLALCHEMY_DATABASE_URI = 'postgresql://myuser:mypassword@localhost/mydatabase'
변경 후
python
# Safe secret management in Flask configuration
import os
class Config:
SECRET_KEY = os.getenv('FLASK_SECRET_KEY')
SQLALCHEMY_DATABASE_URI = os.getenv('DATABASE_URL')
설명:
- 변경 전: 비밀정보(SECRET_KEY, DATABASE URI 등)가 소스 코드에 하드코딩되어 있습니다.
- 변경 후: 환경 변수에서 비밀정보를 읽어와 설정하도록 하여 소스 코드에 비밀정보가 남지 않도록 합니다.
FastAPI
변경 전
python
# Unsafe hardcoded secret in FastAPI configuration
from fastapi import FastAPI
from starlette.middleware.sessions import SessionMiddleware
app = FastAPI()
app.add_middleware(SessionMiddleware, secret_key='your-hardcoded-secret-key', https_only=True)
변경 후
python
# Safe secret management in FastAPI configuration
from fastapi import FastAPI
from starlette.middleware.sessions import SessionMiddleware
import os
app = FastAPI()
app.add_middleware(SessionMiddleware, secret_key=os.environ['FASTAPI_SECRET_KEY'], https_only=True)
설명:
- 변경 전: 비밀정보(secret_key)가 소스 코드에 하드코딩되어 있습니다.
- 변경 후: 환경 변수에서 비밀정보를 읽어와 설정하도록 하여 소스 코드에 비밀정보가 남지 않도록 합니다.