설명
Django, Flask, FastAPI와 같은 웹 프레임워크의 디버그 모드는 개발 중 상세한 오류 정보를 확인하기 위한 기능입니다. 프로덕션에서 활성화하면 스택 트레이스, 소스 코드 일부, 로컬 변수, 설정값 등의 내부 정보가 응답에 포함될 수 있습니다.
Flask의 TESTING 설정은 디버그 모드와 별개의 기능입니다. 이 설정은 테스트 전용 확장 동작을 활성화하고, PROPAGATE_EXCEPTIONS를 별도로 설정하지 않으면 예외 전파도 암시적으로 활성화합니다. TESTING=True 자체가 Flask의 대화형 디버거를 켜지는 않지만, 프로덕션의 정상적인 오류 처리 흐름을 바꾸고 테스트 전용 동작이 실제 요청에 영향을 주게 할 수 있습니다.
잠재적 영향
- 내부 정보 노출: Django의 상세 오류 페이지와 FastAPI의 디버그 트레이스백은 소스 위치, 설정, 요청 처리 구조와 같은 정보를 노출할 수 있습니다.
- 원격 코드 실행: 프로덕션에 노출된 Flask/Werkzeug 대화형 디버거는 브라우저에서 Python 코드를 실행할 수 있습니다. PIN을 보안 통제로 신뢰해서는 안 됩니다.
- 오류 처리 및 확장 동작 변경: Flask 테스트 모드는 예외를 애플리케이션 오류 처리기로 전달하는 대신 전파할 수 있으며, 확장 기능이 테스트 전용 동작을 활성화할 수 있습니다.
해결 방법
- 프로덕션 구성에서는 Django
DEBUG, FlaskDEBUG와TESTING, FastAPIdebug를 명시적인 불리언False로 유지합니다. - 개발·테스트·프로덕션 구성을 분리하고, 배포 전에 실제 적용될 설정을 자동으로 검증합니다.
- 프로덕션에서는 프레임워크의 개발 서버나 대화형 디버거를 사용하지 말고, 일반 오류 응답과 서버 측 로깅·알림을 구성합니다.
- 환경 변수 값을 직접 불리언 인수에 전달하지 않습니다.
os.getenv("DEBUG", "False")는 문자열을 반환하며, 비어 있지 않은 문자열"False"도 Python에서 참으로 평가됩니다. 환경 변수를 사용할 때는 형식이 지정된 설정 계층에서 불리언으로 파싱한 뒤 사용합니다.
개발·테스트 환경에서 필요한 설정은 프로덕션 구성과 분리하고, 배포 시 최종 적용값을 확인하세요.
예시
Django
변경 전
python
# settings/production.py
DEBUG = True
변경 후
python
# settings/production.py
DEBUG = False
Flask 디버그 모드
변경 전
python
from flask import Flask
app = Flask(__name__)
app.run(debug=True)
변경 후
python
from flask import Flask
app = Flask(__name__)
app.config["DEBUG"] = False
# 프로덕션에서는 Flask 개발 서버가 아닌 프로덕션 WSGI 서버로 실행합니다.
Flask 테스트 모드
변경 전
python
from flask import Flask
app = Flask(__name__)
app.config.update(TESTING=True)
# app.testing = True도 같은 설정을 활성화합니다.
변경 후
python
from flask import Flask
app = Flask(__name__)
app.config.update(TESTING=False)
FastAPI
변경 전
python
from fastapi import FastAPI
app = FastAPI(debug=True)
변경 후
python
from fastapi import FastAPI
app = FastAPI(debug=False)
설명:
- 변경 전: 프로덕션에서 상세 오류 또는 테스트 전용 동작을 활성화합니다.
- 변경 후: 프로덕션 구성에 실제 불리언
False를 사용하여 관련 기능을 비활성화합니다.
참조
- Flask 3.1.x: Configuration Handling —
TESTING - Flask 3.1.x: Debugging Application Errors
- Django 5.2 LTS: Deployment checklist —
DEBUG - FastAPI:
FastAPIclass —debug - OWASP: A02:2025 Security Misconfiguration
- OWASP: A05:2021 Security Misconfiguration
- CWE: CWE-489: Active Debug Code