Передовые практики Django (9 части серии)
Django – это зрелая, тестированная битва веб-каркас с хорошо заслуженной репутацией для обеспечения безопасности за последние 15+ лет. Однако Интернет остается опасным местом, а веб-безопасность – это развивающееся поле. Как и большинство веб-фреймворк, Django по умолчанию для локальных настроек развития, когда создан новый проект. ОНУС на разработчике эффективно управлять как локальными значениями по умолчанию и Индивидуальные настройки производства.
Django поставляется с отличным контрольный список развертывания Это можно запускать на производственную версию вашего сайта до развертывания. А также обильные заметки на Безопасность в официальной документации Отказ
Это руководство охватывает лучшие практики безопасности Django, начиная с самых важных и работающих на пути по списку.
Django версия
Рекомендация по безопасности номер один является всегда на последней версии Django. Django имеет новый крупный выпуск каждые 9 месяцев или около того (2.2, 3.0, 3.1 и др.) И незначительный выпуск с исправлениями безопасности/ошибки практически ежемесячно (3.1.1, 3.1.2 и т. Д.). Найдите время регулярно обновлять до последней версии – есть официальное руководство по документации на Обновление до новой версии – Пройдите свой тестовый люкс и продолжите свой проект Django.
Обратите внимание, что написание комплексных тестов и реализацию CI, чтобы тесты работали на каждом коммите, является темой для другого учебника или полноценной книги.
Переменные среды
Существует фундаментальное напряжение между настройками, предназначенными для местного развития и производства. Местное развитие Призы Скорость, Устойчивые сообщения об ошибках и доступ ко всем функциям. Производство требует блокировки веб-сайта и как можно больше, минимизируя доступ. По умолчанию новые проекты Django созданы с startproject
У команды есть локальные настройки развития. Разработчик отвечает за обновление их на настройки производства.
В наши дни стандартный способ переключаться между локальными и производственными настройками с Переменные среды Отказ Вместо того, чтобы иметь несколько settings.py
Файлы, один settings.py
Файл можно использовать с переменными, загруженными в зависимости от окружающей среды: местное или производство.
Существуют несколько способов реализации переменных среды и различные сторонние пакеты, которые могут помочь. Лично мне нравится использовать Ориентиры , в котором есть вариант определения Django, который устанавливает ряд дополнительных пакетов, которые помогают с конфигурацией.
ОТЛАЖИВАТЬ
Возле вершины любого settings.py
Файл это конфигурация для Отладка Отказ По умолчанию он установлен на Правда
Что генерирует, среди прочего, богатая и подробная страница ошибок, которая включает в себя трассировку и много метаданных, включая все определенные в настоящее время настройки Django. Это дорожная карта для отладки локально, но и руководства для любого хакера, который хочет поставить под угрозу ваш сайт, если вы освобожден в производстве. Поэтому убедитесь, что в производстве Отладка
установлен на Ложь
!
СЕКРЕТНЫЙ КЛЮЧ
СЕКРЕТНЫЙ КЛЮЧ Случайно сгенерированная строка, используемая для Криптографическая подписание создан всякий раз, когда startproject
Команда запускается. Очень важно, чтобы Secret_key
на самом деле хранить, ну, секрет.
Все, что нужно, это один GIT Commit и ваш Secret_key
Видно кому-либо с доступом к вашему исходному коду. На практике большинство разработчиков разработают рабочий прототип веб-сайта перед добавлением переменных среды и конфигурации производства. Поэтому перед первым развертыванием найдите время, чтобы создать новый Secret_key
Отказ Один подход – использовать встроенный Python секреты модуль.
$ python -c 'import secrets; print(secrets.token_urlsafe(38))'
Параметр Token_urlsafe
Возвращает количество байтов в текстовой строке безопасной URL. С кодировкой Base64 в среднем каждый байт имеет 1,3 символа. Итак, используя 38
приводит к 51 символам в этом случае. Важно то, что ваш Secret_key
имеет не менее 50 символов. Каждый раз, когда вы запускаете команду, выводится новое значение.
Разрешенные_хосты
Разрешенные_ходки Списки настройки, которые хосты/доменные имена вашего сайта Django могут служить. По умолчанию он устанавливается в пустой список, []
Ака любой хост или домен имеет доступ к вашему сайту. Это должно быть изменено в производстве, чтобы избежать атак заголовка HTTP.
Для местного развития localhost: 8000
и 127.0.0.1:8000
обычно используются в Django, поэтому оба должны быть явно добавлены в настройку. И как только у вас есть пользовательский URL для вашего производственного местоположения – например, если вы используете Heroku, он будет содержать .herokuapp.com.
это тоже должно быть добавлено.
Общий Разрешенные_хосты
Поэтому настройка для приложения Heroku является следующее:
# settings.py ALLOWED_HOSTS = ['.herokuapp.com', 'localhost', '127.0.0.1']
Https/ssl.
В эти дни нет причин не Чтобы развернуть весь ваш сайт за HTTPS. В противном случае хакер может понюхать учетные данные аутентификации, ключи API или на самом деле любую информацию, передаваемую между клиентом и сервером. Существует ряд настроек для включения полной поддержки SSL в проекте Django.
Secure_ssl_redirect Автоматически перенаправляет запросы через http в https. Это должно быть установлено на Правда
.
HTTP строгий транспорт безопасности (HSTS) Является ли политика безопасности, которая позволяет нашему серверу обеспечить то, что веб-браузеры должны взаимодействовать только через HTTP, добавив A Заголовок строгих транспортно-безопасности . Есть три неявных конфигурации HSTS в settings.py
Файл, который необходимо обновить для производства:
- Secure_hsts_seconds =
0.
- Secure_hsts_include_subdomakes =
Ложь
- Secure_hsts_preload =
Ложь
Secure_hsts_seconds
Настройка установлена на 0
По умолчанию, но чем тем больше, чем лучше для целей безопасности. Хороший по умолчанию – установить его на один месяц, вместо этого, 2,592 000 секунд. Secure_hsts_include_subdomakes
заставляет поддомены также исключительно использовать SSL, поэтому он должен быть установлен на Правда
в производстве. И Secure_hsts_preload
только имеет эффект, когда есть ненулевое значение для Secure_hsts_seconds
, но так как мы просто установили один, ему нужно будет установлено Правда
Отказ
СМИ файлы
Большинство сайтов Django будут содержать файлы, которые являются статическими и неизменными, такие как CSS, JavaScript, изображения и так далее. Там широко упоминается как Статический
файлы. Для определенных веб-сайтов загружено пользователем содержимое является ключевой функцией, такая как сайт совместного использования изображений, похожий на Instagram. Django относится к загруженному пользователем контент AS СМИ
и должны быть сделаны дополнительные меры предосторожности.
В общем, вы не можете доверять своим пользователям. Особенно, когда у них есть возможность что-то загружать на ваш сайт. Поэтому для веб-сайтов с медиафайлами, размещающими весь статический контент на облачной службе или CDN, подобно S3 Amazon. Сторонний пакет Django-хранилища Это популярный способ настроить это для вашего сайта и облегчить проблемы безопасности СМИ.
Админ
Приложение Django Admin – мощная встроенная функция. Однако, поскольку каждый проект Django находится в /admin
По умолчанию хакеру легко пытаться заставить свой путь в любой веб-сайт Django на этом URL. Простой способ защитить ваш админ – просто изменить URL для администратора. В приведенном ниже примере его было изменено на что-нибудь-но-админ
# config/urls.py urlpatterns = [ path('anything-but-admin/', admin.site.urls),
Для дополнительных советов по упрочнению вашего администратора см. В статье 10 советов по созданию администратора Django Более безопасный Отказ
Заключение
Существует множество улучшений безопасности, которые могут быть добавлены в проект Django, но это попадает в основные моменты. Обязательно запустите контрольный список развертывания Django в настройках производства, чтобы убедиться, что вы сделали все необходимые изменения.
$ python manage.py check --deploy
Для дальнейшей помощи по безопасности книги Django для профессионалов Прогулки по созданию веб-сайта готовности к производству с правильными функциями безопасности, советы по производительности, использование Docker и многое другое.
Передовые практики Django (9 части серии)
Оригинал: “https://dev.to/learndjango/django-best-practices-security-4fpp”