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']
    

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

1
Задача
Модуль 3: Django, 2 уровень, 9 лекция
Недоступна
Изучение параметра DEBUG
Изучение параметра DEBUG
1
Задача
Модуль 3: Django, 2 уровень, 9 лекция
Недоступна
Настройка параметров CSRF_COOKIE_SECURE и SESSION_COOKIE_SECURE
Настройка параметров CSRF_COOKIE_SECURE и SESSION_COOKIE_SECURE
3
Опрос
Файлы настроек Django, 2 уровень, 9 лекция
Недоступен
Файлы настроек Django
Файлы настроек Django
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Максим Уровень 71
18 октября 2025
alias pvenv='python3 -m venv .venv' Это алиаз для генерации окружения , теперь можно актвировать одной командой pvenv