Контрольный список развертывания ¶
Интернет - враждебная среда. Перед развертыванием проекта Django вам следует потратить некоторое время на то, чтобы просмотреть свои настройки с учетом безопасности, производительности и операций.
Django включает в себя множество функций безопасности . Некоторые из них встроены и всегда включены. Другие необязательны, потому что они не всегда подходят или неудобны для разработки. Например, принудительное использование HTTPS может не подходить для всех веб-сайтов и непрактично для локальной разработки.
Оптимизация производительности - еще одна категория компромиссов с удобством. Например, кеширование полезно в производственной среде, но не в локальной разработке. Потребности в сообщениях об ошибках также сильно различаются.
Следующий контрольный список включает настройки, которые:
- должен быть правильно настроен, чтобы Django обеспечивал ожидаемый уровень безопасности;
- ожидается, что они будут отличаться в каждой среде;
- включить дополнительные функции безопасности;
- включить оптимизацию производительности;
- предоставлять отчеты об ошибках.
Многие из этих настроек являются конфиденциальными и должны рассматриваться как конфиденциальные. Если вы выпускаете исходный код для своего проекта, обычной практикой является публикация подходящих настроек для разработки и использование модуля частных настроек для производства.
Беги ¶manage.py check --deploy
Некоторые из описанных ниже проверок можно автоматизировать с помощью этой опции. Обязательно запустите его с файлом производственных настроек, как описано в документации по опции.check
--deploy
Критические настройки ¶
SECRET_KEY
¶
Секретный ключ должен быть большим случайным значением и должен храниться в секрете.
Убедитесь, что ключ, используемый в производственной среде, больше нигде не используется, и не передавайте его в систему управления версиями. Это уменьшает количество векторов, из которых злоумышленник может получить ключ.
Вместо того, чтобы жестко закодировать секретный ключ в вашем модуле настроек, рассмотрите возможность загрузки его из переменной среды:
import os
SECRET_KEY = os.environ['SECRET_KEY']
или из файла:
with open('/etc/secret_key.txt') as f:
SECRET_KEY = f.read().strip()
DEBUG
¶
Вы никогда не должны включать отладку в производственной среде.
Вы, безусловно, разрабатываете свой проект с помощью , поскольку это позволяет использовать такие удобные функции, как полная обратная связь в вашем браузере.DEBUG = True
Однако для производственной среды это действительно плохая идея, потому что из-за нее происходит утечка большого количества информации о вашем проекте: выдержки из исходного кода, локальные переменные, настройки, используемые библиотеки и т. Д.
Настройки, зависящие от среды ¶
ALLOWED_HOSTS
¶
Когда Django вообще не работает без подходящего значения для .DEBUG = False
ALLOWED_HOSTS
Этот параметр необходим для защиты вашего сайта от некоторых атак CSRF. Если вы используете подстановочный знак, вы должны выполнить собственную проверку Host
HTTP-заголовка или иным образом убедиться, что вы не уязвимы для этой категории атак.
Вы также должны настроить веб-сервер, который находится перед Django, для проверки хоста. Он должен отвечать статической страницей ошибки или игнорировать запросы на неправильные хосты вместо того, чтобы перенаправлять запрос в Django. Таким образом вы избежите ложных ошибок в журналах Django (или в электронных письмах, если у вас настроен отчет об ошибках). Например, на nginx вы можете настроить сервер по умолчанию так, чтобы он возвращал «444 No Response» на нераспознанном хосте:
server {
listen 80 default_server;
return 444;
}
CACHES
¶
Если вы используете кеш, параметры подключения могут отличаться при разработке и производстве. Django по умолчанию использует кэширование в локальной памяти для каждого процесса, что может быть нежелательно.
Кэш-серверы часто имеют слабую аутентификацию. Убедитесь, что они принимают соединения только от ваших серверов приложений.
DATABASES
¶
Параметры подключения к базе данных, вероятно, различаются при разработке и производстве.
Пароли базы данных очень чувствительны. Вы должны защищать их точно так же
SECRET_KEY
.
Для максимальной безопасности убедитесь, что серверы баз данных принимают соединения только от серверов приложений.
Если вы еще не настроили резервное копирование для своей базы данных, сделайте это прямо сейчас!
STATIC_ROOT
и ¶STATIC_URL
Статические файлы автоматически обслуживаются сервером разработки. В процессе производства вы должны определить STATIC_ROOT
каталог, в который вы
collectstatic
будете их копировать.
См. Управление статическими файлами (например, изображениями, JavaScript, CSS) для получения дополнительной информации.
MEDIA_ROOT
и ¶MEDIA_URL
Медиа-файлы загружают ваши пользователи. Им не доверяют! Убедитесь, что ваш веб-сервер никогда не пытается их интерпретировать. Например, если пользователь загружает
.php
файл, веб-сервер не должен его выполнять.
Теперь самое время проверить вашу стратегию резервного копирования этих файлов.
HTTPS ¶
Любой веб-сайт, который позволяет пользователям входить в систему, должен применять протокол HTTPS для всего сайта, чтобы избежать передачи токенов доступа в открытом виде. В Django токены доступа включают логин / пароль, cookie сеанса и токены сброса пароля. (Вы мало что можете сделать для защиты токенов сброса пароля, если отправляете их по электронной почте.)
Защита конфиденциальных областей, таких как учетная запись пользователя или администратор, недостаточна, потому что один и тот же файл cookie сеанса используется для HTTP и HTTPS. Ваш веб-сервер должен перенаправлять весь HTTP-трафик на HTTPS и передавать только HTTPS-запросы в Django.
После настройки HTTPS включите следующие параметры.
CSRF_COOKIE_SECURE
¶
Установите это значение, True
чтобы избежать случайной передачи файла cookie CSRF через HTTP.
SESSION_COOKIE_SECURE
¶
Установите это значение, True
чтобы избежать случайной передачи файла cookie сеанса через HTTP.
Оптимизация производительности ¶
Настройка отключает несколько функций, которые полезны только при разработке. Кроме того, вы можете настроить следующие параметры.DEBUG = False
Сессии ¶
Рассмотрите возможность использования кэшированных сеансов для повышения производительности.
При использовании сеансов на основе базы данных регулярно очищайте старые сеансы, чтобы избежать хранения ненужных данных.
CONN_MAX_AGE
¶
Включение постоянных подключений к базе данных может привести к значительному ускорению подключения к учетным записям базы данных в течение значительной части времени обработки запроса.
Это очень помогает на виртуализированных хостах с ограниченной производительностью сети.
TEMPLATES
¶
Включение кэшированного загрузчика шаблонов часто значительно повышает производительность, поскольку позволяет избежать компиляции каждого шаблона каждый раз, когда он должен быть отрисован. Дополнительную информацию см. В документации по загрузчикам шаблонов .
Отчет об ошибках ¶
К тому времени, когда вы отправите свой код в рабочую среду, он будет надежным, но вы не сможете исключить непредвиденные ошибки. К счастью, Django может фиксировать ошибки и уведомлять вас об этом.
LOGGING
¶
Просмотрите конфигурацию ведения журнала перед запуском веб-сайта и убедитесь, что он работает должным образом, как только вы получили некоторый трафик.
См. « Ведение журнала» для получения подробной информации о ведении журнала.
ADMINS
и ¶MANAGERS
ADMINS
будут уведомлены о 500 ошибках по электронной почте.
MANAGERS
будет уведомлен об ошибках 404.
IGNORABLE_404_URLS
может помочь отфильтровать ложные отчеты.
См. Отчеты об ошибках для получения подробной информации об отправке сообщений об ошибках по электронной почте.
Сообщения об ошибках по электронной почте не очень хорошо масштабируются
Прежде чем ваш почтовый ящик заполнится отчетами, подумайте об использовании системы мониторинга ошибок, такой как Sentry . Sentry также может агрегировать журналы.
Настройте представления ошибок по умолчанию ¶
Django включает представления по умолчанию и шаблоны для нескольких кодов ошибок HTTP. Вы можете переопределить шаблоны по умолчанию, создав следующие шаблоны в корневом каталоге шаблона: 404.html
, 500.html
, 403.html
, и
400.html
. Представления ошибок по умолчанию , в которых используются эти шаблоны, должно хватить для 99% веб-приложений, но вы также можете
настроить их .