Час поговорити про речі, які зроблять ваш додаток не тільки зручним для відлагодження, але й безпечним для користувачів.
Що таке DEBUG? Чому це важливо?
Якби Django був кінопостановкою, то параметр DEBUG — це прожектор, який висвітлює помилки прямо на сцені. Коли DEBUG=True, розробники отримують детальні повідомлення про помилки, повні трейсбеки з вказівкою точного місця збою та сценаріїв, що викликали проблему. Це надзвичайно корисно в процесі розробки.
Однак такий рівень відкритості може призвести до катастрофічних наслідків, якщо залишити його увімкненим на продакшені. Уявіть, що хтось несанкціоновано отримує доступ до сторінок з помилками та бачить усі конфіденційні дані про ваш проєкт, включаючи налаштування, назви модулів, шляхи та навіть змінні оточення. Ось чому налаштування DEBUG — життєво важливий параметр для забезпечення безпеки.
# settings.py
DEBUG = True # Це нормально для локальної розробки
Коли перейдете на продакшен — змінюйте це значення на False без вагань:
DEBUG = False # На продакшені вмикати не можна
На практиці значення параметра DEBUG зазвичай залежить від змінної оточення, щоб випадково нічого не переплутати:
import os
DEBUG = os.getenv('DJANGO_DEBUG', 'False') == 'True' # Приклад використання змінної оточення
Не забудьте налаштувати ALLOWED_HOSTS при вимкненні DEBUG. Детальніше — нижче.
ALLOWED_HOSTS: Хто може відвідувати ваш сайт?
Коли ви вимикаєте DEBUG, Django перестає довіряти всім підряд, і вам потрібно вказати список доменів або IP-адрес, з яких можна звертатися до вашого сервера. Це запобігає атакам типу HTTP Host Header Attack. Наприклад:
ALLOWED_HOSTS = ['example.com', 'www.example.com', '127.0.0.1']
Якщо ви розгортаєте проєкт локально для тестів, можна дозволити будь-який хост, вказавши зірочку:
ALLOWED_HOSTS = ['*'] # Тільки для локальних тестів. У продакшені — ні за яких обставин!
Основні параметри безпеки в settings.py
Налаштування безпеки Django стануть для вас надійним щитом у боротьбі з вразливостями веб-додатків. Давайте розглянемо ключові параметри:
1. SECRET_KEY
Цей ключ необхідно тримати в секреті. Django використовує його для шифрування даних, наприклад, у cookies. Якщо ваш SECRET_KEY стане відомий зловмисникам, це може призвести до компрометації сесій і CSRF-токенів.
SECRET_KEY = 'це_дуже_секретний_ключ_ніколи_його_не_публікуйте'
На практиці його потрібно винести в змінні оточення:
import os
SECRET_KEY = os.getenv('DJANGO_SECRET_KEY', 'підставний_ключ_для_розробки')
2. CSRF_COOKIE_SECURE
Цей параметр змушує браузер відправляти CSRF-токени тільки через захищені з'єднання (HTTPS). Увімкніть його у продакшені:
CSRF_COOKIE_SECURE = True
3. SESSION_COOKIE_SECURE
Аналогічно попередньому, цей параметр обмежує передачу сесійних cookies тільки через HTTPS:
SESSION_COOKIE_SECURE = True
4. SECURE_BROWSER_XSS_FILTER
Увімкнення захисту від XSS (міжсайтових сценаріїв) у браузері:
SECURE_BROWSER_XSS_FILTER = True
5. SECURE_CONTENT_TYPE_NOSNIFF
Цей параметр запобігає MIME-сніффінгу, який може бути використаний для атак:
SECURE_CONTENT_TYPE_NOSNIFF = True
6. SECURE_HSTS_SECONDS
HTTP Strict Transport Security (HSTS) змушує браузери використовувати тільки HTTPS для вашого сайту. Цей параметр вказує час (у секундах), протягом якого браузер повинен дотримуватися правила. Налаштовуємо так:
SECURE_HSTS_SECONDS = 31536000 # 1 рік
SECURE_HSTS_INCLUDE_SUBDOMAINS = True # Застосовувати до всіх піддоменів
SECURE_HSTS_PRELOAD = True # Рекомендується для попереднього завантаження HSTS
Поради з безпеки
1. Використовуйте HTTPS
Усі дані, які обробляє ваш сайт, мають передаватися через захищений канал. Ви можете налаштувати SSL сертифікати через такі сервіси, як Let's Encrypt.
2. Обмежуйте доступ за IP
Якщо ваш сайт працює з адміністративною частиною або API, до яких повинні підключатися лише вибрані IP, застосовуйте фільтрацію запитів. Наприклад, через конфігурацію веб-сервера (Nginx/Apache).
3. Не зберігайте чутливі дані у репозиторії
Файли на кшталт settings.py, які містять конфіденційні параметри, можуть бути випадково опубліковані. Використовуйте файли .env та бібліотеки типу python-decouple.
Практичне заняття: налаштування безпеки
- Переконайтеся, що ваш параметр
DEBUGдорівнюєTrueдля локальної розробки і залежить від змінної середовища. - Налаштуйте ваш проєкт так, щоб
SECRET_KEYвикористовував значення змінної середовища. - Увімкніть наступні параметри у
settings.py:CSRF_COOKIE_SECURE = True SESSION_COOKIE_SECURE = True SECURE_BROWSER_XSS_FILTER = True SECURE_CONTENT_TYPE_NOSNIFF = True SECURE_HSTS_SECONDS = 31536000 SECURE_HSTS_INCLUDE_SUBDOMAINS = True SECURE_HSTS_PRELOAD = True - Додайте у
ALLOWED_HOSTSлише тестові та локальні домени/IP, такі як:ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
Після цієї лекції ви зможете впевнено налаштовувати як локальну розробку, так і робити перші кроки для забезпечення безпеки вашого додатка. Давайте тепер перейдемо до наступної важливої теми, щоб поглибити свої знання!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ