Рубрики
Без рубрики

Передовые практики Django: Безопасность

Django – это зрелый, тестируемый с боевыми тестами веб-каркас с хорошо заслуженной репутацией для безопасности над … Tagged с Django, Python, Учебником, начинающим.

Передовые практики 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 По умолчанию, но чем тем больше, чем лучше для целей безопасности. Хороший по умолчанию – установить его на один месяц, вместо этого, 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”