JavaRush /Курси /Модуль 3: Django /Вступ до налаштувань DEBUG і SECURITY

Вступ до налаштувань DEBUG і SECURITY

Модуль 3: Django
Рівень 2 , Лекція 9
Відкрита

Час поговорити про речі, які зроблять ваш додаток не тільки зручним для відлагодження, але й безпечним для користувачів.

Що таке 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.

Практичне заняття: налаштування безпеки

  1. Переконайтеся, що ваш параметр DEBUG дорівнює True для локальної розробки і залежить від змінної середовища.
  2. Налаштуйте ваш проєкт так, щоб SECRET_KEY використовував значення змінної середовища.
  3. Увімкніть наступні параметри у 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
    
  4. Додайте у ALLOWED_HOSTS лише тестові та локальні домени/IP, такі як:
    ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
    

Після цієї лекції ви зможете впевнено налаштовувати як локальну розробку, так і робити перші кроки для забезпечення безпеки вашого додатка. Давайте тепер перейдемо до наступної важливої теми, щоб поглибити свої знання!

3
Опитування
Файли налаштувань Django, рівень 2, лекція 9
Недоступний
Файли налаштувань Django
Файли налаштувань Django
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ