Đây là một trong những bug bảo mật phổ biến và nguy hiểm nhất với Django. DEBUG = True bật ra hàng loạt hành vi chỉ dành cho dev mà bạn không muốn lộ ra ngoài.
Trang lỗi 500 sẽ hiển thị traceback đầy đủ kèm biến local — lộ SECRET_KEY, DB connection string, API key trong os.environ, payload request kèm password. ALLOWED_HOSTS bị bỏ qua nên bất kỳ Host header nào cũng được phục vụ, mở cửa cho HTTP Host Header Injection và cache poisoning. Django tự serve static file (chậm và sai layer — prod nginx mới đảm nhận). Mọi SQL query bị lưu trong connection.queries gây memory leak với app long-running. Email backend mặc định in ra console thay vì gửi thật — bạn tưởng đã gửi mà thực ra không.
# settings/prod.py — luôn luôn:
DEBUG = False
ALLOWED_HOSTS = ['example.com', 'www.example.com']
# CI/startup script kiểm tra:
if DEBUG and ENVIRONMENT == 'production':
raise RuntimeError('DEBUG must be False in production')Đừng tin câu "chỉ bật DEBUG vài phút để debug prod" — attacker scan liên tục, vài giây cũng đủ để leak SECRET_KEY.
- Cần debug prod thì dùng structured logging + Sentry, không bao giờ flip
DEBUG. - Production cũng phải bật
SECURE_*(xem [[#9260]]) để chốt thêm các lớp HTTPS, HSTS, cookie an toàn.