Spec-Zone.ru › Django 2.1

Среднее ПО

В данном документе описаны все компоненты среднего ПО, поставляемые с Django. Сведения о том, как их использовать и как написать собственное среднее ПО, см. в руководстве по использованию среднего ПО.

Доступное среднее ПО

Среднее ПО кэширования

class UpdateCacheMiddleware [source]
class FetchFromCacheMiddleware [source]

Включите кэш для всего сайта. Если они включены, каждая страница, работающая на Django, будет кэшироваться до тех пор, пока это определено настройкой CACHE_MIDDLEWARE_SECONDS. См. документацию по кэшированию.

Среднее ПО «общего назначения»

class CommonMiddleware [source]

Добавляет несколько удобств для перфекционистов:

  • Запрещает доступ к пользовательским агентам в настройке DISALLOWED_USER_AGENTS, которая должна быть списком скомпилированных объектов регулярных выражений.
  • Выполняет переписывание URL на основе настроек APPEND_SLASH и PREPEND_WWW.

    Если APPEND_SLASH равна True, а начальный URL не заканчивается слешем и не найден в URLconf, то формируется новый URL, добавляя слеш в конец. Если этот новый URL найден в URLconf, Django перенаправляет запрос на этот новый URL. В противном случае обрабатывается начальный URL, как обычно.

    Например, foo.com/bar будет перенаправлено на foo.com/bar/, если у вас нет корректной схемы URL для foo.com/bar, но есть корректная схема для foo.com/bar/.

    Если PREPEND_WWW равна True, URL без ведущей части «www.» будут перенаправлены на тот же URL с ведущей частью «www.».

    Оба этих параметра предназначены для нормализации URL. Философия заключается в том, что каждый URL должен существовать в одном и только одном месте. Технически URL foo.com/bar отличается от foo.com/bar/ — поисковый индексатор рассматривал бы их как отдельные URL, поэтому лучшим практикой является нормализация URL.

  • Устанавливает заголовок Content-Length для ответов, не являющихся потоковыми.
CommonMiddleware.response_redirect_class

По умолчанию HttpResponsePermanentRedirect. Подкласс CommonMiddleware и переопределение атрибута для настройки перенаправлений, выполняемых средним ПО.

class BrokenLinkEmailsMiddleware [source]
  • Отправляет уведомления по электронной почте о нерабочих ссылках адресатам в настройке MANAGERS (см. отчеты об ошибках).

Среднее ПО GZip

class GZipMiddleware [source]

Предупреждение

Недавно исследователи в области информационной безопасности выявили, что при использовании методов сжатия (включая GZipMiddleware) на веб-сайте, сайт может быть уязвим к ряду возможных атак. Перед использованием GZipMiddleware на вашем сайте, следует очень внимательно оценить, подвержены ли вы этим атакам. Если у вас есть хоть малейшие сомнения, следует избегать использования GZipMiddleware. Более подробную информацию см. в статье статье BREACH (PDF) и на сайте breachattack.com.

Сжимает содержимое для браузеров, поддерживающих сжатие GZip (все современные браузеры).

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

Содержимое не будет сжиматься, если выполняется одно из следующих условий:

  • Тело содержимого короче 200 байт.
  • В ответе уже задан заголовок Content-Encoding.
  • Запрос (браузер) не отправил заголовок Accept-Encoding, содержащий gzip.

Если у ответа есть заголовок ETag, ETag делается слабым, чтобы соответствовать RFC 7232#section-2.1.

Вы можете применить сжатие GZip к отдельным представлениям, используя декоратор gzip_page().

Среднее ПО условного получения

class ConditionalGetMiddleware [source]

Обрабатывает операции условного получения. Если ответ не имеет заголовка ETag, среднее ПО добавит его при необходимости. Если у ответа есть заголовок ETag или Last-Modified, а у запроса есть заголовок If-None-Match или If-Modified-Since, ответ заменяется на HttpResponseNotModified.

Среднее ПО локализации

class LocaleMiddleware [source]

Включает выбор языка на основе данных запроса. Он настраивает содержимое для каждого пользователя. См. документацию по интернационализации.

LocaleMiddleware.response_redirect_class

По умолчанию HttpResponseRedirect. Подкласс LocaleMiddleware и переопределение атрибута для настройки перенаправлений, выполняемых средним ПО.

Среднее ПО сообщений

class MessageMiddleware [source]

Включает поддержку сообщений на основе cookie и сессии. См. документацию по сообщениям.

Среднее ПО безопасности

Предупреждение

Если ваша среда развертывания позволяет, обычно лучше использовать ваш веб-сервер для выполнения функций, предоставляемых SecurityMiddleware. Таким образом, если поступают запросы, которые не обслуживаются Django (например, статические медиафайлы или загруженные пользователем файлы), они будут иметь те же защиты, что и запросы к вашему приложению Django.

class SecurityMiddleware [source]

django.middleware.security.SecurityMiddleware обеспечивает несколько улучшений безопасности для цикла запроса/ответа. Каждый из них может быть независимо включен или выключен с помощью настройки.

  • SECURE_BROWSER_XSS_FILTER
  • SECURE_CONTENT_TYPE_NOSNIFF
  • SECURE_HSTS_INCLUDE_SUBDOMAINS
  • SECURE_HSTS_PRELOAD
  • SECURE_HSTS_SECONDS
  • SECURE_REDIRECT_EXEMPT
  • SECURE_SSL_HOST
  • SECURE_SSL_REDIRECT

HTTP Strict Transport Security

Для сайтов, которые должны быть доступны только по протоколу HTTPS, вы можете инструктировать современные браузеры отказываться от подключения к вашему домену через небезопасное соединение (на определённый период времени), установив заголовок “Strict-Transport-Security”. Это уменьшит вашу уязвимость к некоторым атакам типа «человек посередине» (MITM) при обходе SSL.

SecurityMiddleware установит этот заголовок для всех ответов HTTPS, если вы установите настройку SECURE_HSTS_SECONDS на ненулевое целое число.

END_OF_DOCUMENT_MARKER

При включении HSTS рекомендуется сначала использовать небольшое значение для тестирования, например, SECURE_HSTS_SECONDS = 3600 на один час. Каждый раз, когда веб-браузер видит заголовок HSTS с вашего сайта, он откажется от не защищённого (используя HTTP) обмена с вашим доменом на указанный период. После подтверждения, что все ресурсы на вашем сайте обслуживаются безопасно (т.е. HSTS не нарушил работу чего-либо), рекомендуется увеличить это значение, чтобы защитить редких посетителей (31536000 секунд, т.е. 1 год, — обычное значение).

Кроме того, если вы установите значение SECURE_HSTS_INCLUDE_SUBDOMAINS в True, SecurityMiddleware добавит директиву includeSubDomains в заголовок Strict-Transport-Security. Это рекомендуется (при условии, что все поддомены обслуживаются исключительно через HTTPS), в противном случае ваш сайт может остаться уязвимым через небезопасное подключение к поддомену.

Если вы хотите добавить свой сайт в список предварительной загрузки браузера browser preload list, установите значение SECURE_HSTS_PRELOAD в True. Это добавит директиву preload в заголовок Strict-Transport-Security.

Предупреждение

Политика HSTS применяется ко всему вашему домену, а не только к URL-адресу ответа, на котором вы установили заголовок. Поэтому вы должны использовать её только в том случае, если весь ваш домен обслуживается только через HTTPS.

Браузеры, корректно обрабатывающие заголовок HSTS, откажутся от возможности пользователей обойти предупреждения и подключиться к сайту с истекшим, самоподписанным или иным образом недопустимым SSL-сертификатом. Если вы используете HSTS, убедитесь, что ваши сертификаты в хорошем состоянии и остаются таковыми!

Примечание

Если вы развернуты за балансировщиком нагрузки или обратным прокси-сервером, и заголовок Strict-Transport-Security не добавляется в ваши ответы, возможно, Django не понимает, что находится на защищённом соединении; вам может потребоваться установить параметр SECURE_PROXY_SSL_HEADER.

X-Content-Type-Options: nosniff

Некоторые браузеры пытаются угадать типы содержимого загружаемых ресурсов, переопределяя заголовок Content-Type. Хотя это может помочь отобразить сайты с неправильно настроенными серверами, это также может представлять собой угрозу безопасности.

Если ваш сайт обслуживает загруженные пользователями файлы, злоумышленник может загрузить специально подготовленный файл, который будет интерпретироваться браузером как HTML или JavaScript, когда ожидается что-то безобидное.

Чтобы предотвратить угадывание браузером типа содержимого и всегда использовать тип, указанный в заголовке Content-Type, вы можете передать заголовок X-Content-Type-Options: nosniff. SecurityMiddleware сделает это для всех ответов, если значение параметра SECURE_CONTENT_TYPE_NOSNIFF равно True.

Обратите внимание, что в большинстве случаев развертывания, где Django не участвует в обслуживании файлов, загруженных пользователем, это значение не поможет. Например, если ваш MEDIA_URL обслуживается непосредственно вашим front-end веб-сервером (nginx, Apache и т. д.), то вы должны установить этот заголовок там. С другой стороны, если вы используете Django, чтобы, например, потребовать авторизацию для скачивания файлов и не можете установить заголовок с помощью веб-сервера, это значение будет полезно.

X-XSS-Protection: 1; mode=block

Некоторые браузеры могут блокировать содержимое, которое, по-видимому, является атакой XSS. Они работают, ища JavaScript-содержимое в параметрах GET или POST страницы. Если JavaScript воспроизводится в ответ сервера, отображение страницы блокируется, и вместо неё отображается страница ошибки.

Заголовок X-XSS-Protection используется для управления работой фильтра XSS.

Для включения фильтра XSS в браузере и принудительного блокирования подозрительных атак XSS можно передать заголовок X-XSS-Protection: 1; mode=block . SecurityMiddleware сделает это для всех ответов, если значение параметра SECURE_BROWSER_XSS_FILTER равно True.

Предупреждение

Фильтр XSS браузера — полезная мера защиты, но нельзя полагаться на него исключительно. Он не может обнаруживать все атаки XSS, и не все браузеры поддерживают заголовок. Убедитесь, что вы всё ещё валидируете и очищаете весь ввод, чтобы предотвратить атаки XSS.

Переадресация SSL

Если ваш сайт поддерживает как HTTP, так и HTTPS-соединения, пользователи по умолчанию, скорее всего, получат небезопасное соединение. Для повышения безопасности вы должны перенаправлять все HTTP-соединения на HTTPS.

Если вы установите значение параметра SECURE_SSL_REDIRECT в True, SecurityMiddleware постоянно (HTTP 301) перенаправит все HTTP-соединения на HTTPS.

Примечание

Для повышения производительности предпочтительно выполнять эти перенаправления за пределами Django, в балансировщике нагрузки front-end или обратном прокси-сервере, таком как nginx. SECURE_SSL_REDIRECT предназначен для случаев развертывания, когда это не возможно.

Если параметр SECURE_SSL_HOST имеет значение, все перенаправления будут отправлены на этот хост вместо исходного запрошенного хоста.

Если на вашем сайте есть несколько страниц, которые должны быть доступны через HTTP и не перенаправляться на HTTPS, вы можете указать регулярные выражения для сопоставления этих URL-адресов в параметре SECURE_REDIRECT_EXEMPT.

Примечание

Если вы развернуты за балансировщиком нагрузки или обратным прокси-сервером, и Django не может определить, является ли запрос уже защищённым, вам может потребоваться установить параметр SECURE_PROXY_SSL_HEADER.

Средства промежуточного ПО сеанса

class SessionMiddleware [source]

Включает поддержку сеансов. См. документацию по сеансам.

Средства промежуточного ПО сайта

class CurrentSiteMiddleware [source]

Добавляет атрибут site, представляющий текущий сайт, к каждому входящему объекту HttpRequest. См. документацию по сайтам.

Средства промежуточного ПО аутентификации

class AuthenticationMiddleware

Добавляет атрибут user, представляющий текущего пользователя, к каждому входящему объекту HttpRequest. См. аутентификацию в веб-запросах.

class RemoteUserMiddleware

Средства промежуточного ПО для использования аутентификации, предоставляемой веб-сервером. Подробности использования см. в аутентификации с помощью REMOTE_USER.

class PersistentRemoteUserMiddleware

Средства промежуточного ПО для использования аутентификации, предоставляемой веб-сервером, когда она включена только на странице входа. Подробности использования см. в использовании REMOTE_USER только на страницах входа.

Средства промежуточного ПО защиты CSRF

class CsrfViewMiddleware [source]

Обеспечивает защиту от поддельных межсайтовых запросов (CSRF), добавляя скрытые поля в формы POST и проверяя запросы на наличие правильного значения. См. документацию по защите от поддельных межсайтовых запросов.

X-Frame-Options средства промежуточного ПО

class XFrameOptionsMiddleware [source]

Простая защита от clickjacking с помощью заголовка X-Frame-Options.

Порядок средств промежуточного ПО

Вот несколько подсказок по порядку различных классов средств промежуточного ПО Django:

  1. SecurityMiddleware

    Его следует расположить в верхней части списка, если вы собираетесь включить переадресацию SSL, поскольку это позволяет избежать прохождения через множество других ненужных промежуточных программ.

  2. UpdateCacheMiddleware

    Перед теми, которые изменяют заголовок Vary (SessionMiddleware, GZipMiddleware, LocaleMiddleware).

  3. GZipMiddleware

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

    После UpdateCacheMiddleware: изменяет заголовок Vary.

  4. SessionMiddleware

    После UpdateCacheMiddleware: изменяет заголовок Vary.

  5. ConditionalGetMiddleware

    Перед любой промежуточной программой, которая может изменить ответ (она устанавливает заголовок ETag).

    После GZipMiddleware, чтобы не рассчитывать заголовок ETag для сжатых данных.

  6. LocaleMiddleware

    Одна из самых верхних, после SessionMiddleware (использует данные сессии) и UpdateCacheMiddleware (изменяет заголовок Vary).

  7. CommonMiddleware

    Перед любой промежуточной программой, которая может изменить ответ (она устанавливает заголовок Content-Length). Промежуточная программа, которая появляется перед CommonMiddleware и изменяет ответ, должна сбросить Content-Length.

    Ближе кверху: перенаправляет при установке APPEND_SLASH или PREPEND_WWW в значение True.

  8. CsrfViewMiddleware

    Перед любой промежуточной программой для представления, которая предполагает, что атаки CSRF были обработаны.

    Он должен следовать за SessionMiddleware если вы используете CSRF_USE_SESSIONS.

  9. AuthenticationMiddleware

    После SessionMiddleware: использует хранилище сессий.

  10. MessageMiddleware

    После SessionMiddleware: может использовать хранилище, основанное на сессиях.

  11. FetchFromCacheMiddleware

    После любой промежуточной программы, которая изменяет заголовок Vary: этот заголовок используется для выбора значения для ключа хэша кеша.

  12. FlatpageFallbackMiddleware

    Должен быть в нижней части, так как это промежуточная программа последнего средства.

  13. RedirectFallbackMiddleware

    Должен быть в нижней части, так как это промежуточная программа последнего средства.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/2.1/ref/middleware/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API