Spec-Zone.ru › Django 3.0

Защита от Clickjacking

Средство промежуточного программного обеспечения (middleware) и декораторы для clickjacking предоставляют простую в использовании защиту от clickjacking. Этот тип атаки происходит, когда вредоносный сайт обманывает пользователя, заставляя его нажать на скрытый элемент другого сайта, загруженного в скрытой фрейме или iframe.

Пример Clickjacking

Представьте себе онлайн-магазин с страницей, где авторизованный пользователь может нажать «Купить сейчас», чтобы приобрести товар. Пользователь для удобства оставил авторизацию на сайте. Вредоносный сайт может создать кнопку «Мне нравятся пони» на одной из своих страниц и загрузить страницу магазина в прозрачном iframe таким образом, чтобы кнопка «Купить сейчас» была невидимо наложена на кнопку «Мне нравятся пони». Если пользователь посетит сайт злоумышленника, нажав «Мне нравятся пони», произойдёт непреднамеренное нажатие на кнопку «Купить сейчас» и нежелательная покупка товара.

Предотвращение clickjacking

Современные браузеры учитывают HTTP-заголовок X-Frame-Options, который указывает, разрешено ли ресурсу загружаться в фрейме или iframe. Если ответ содержит заголовок со значением SAMEORIGIN , браузер загрузит ресурс только в фрейме, если запрос исходит с того же сайта. Если заголовок установлен в DENY , браузер заблокирует загрузку ресурса в фрейме независимо от того, какой сайт сделал запрос.

Django предоставляет несколько способов включения этого заголовка в ответы с вашего сайта:

  1. Средство промежуточного программного обеспечения, которое устанавливает заголовок во всех ответах.
  2. Набор декораторов представлений, которые могут быть использованы для переопределения средства промежуточного программного обеспечения или для установки заголовка только для определённых представлений.

Заголовок X-Frame-Options будет устанавливаться только средством промежуточного программного обеспечения или декораторами представлений, если он ещё не присутствует в ответе.

Как использовать

Указание X-Frame-Options для всех ответов

Чтобы установить одинаковое значение X-Frame-Options для всех ответов на вашем сайте, поместите 'django.middleware.clickjacking.XFrameOptionsMiddleware' в MIDDLEWARE:

MIDDLEWARE = [
    ...
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ...
]

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

По умолчанию средство промежуточного программного обеспечения установит заголовок X-Frame-Options в значение DENY для каждого исходящего HttpResponse. Если вам нужно другое значение для этого заголовка, установите параметр X_FRAME_OPTIONS:

X_FRAME_OPTIONS = 'SAMEORIGIN'
Изменено в Django 3.0:

Значение по умолчанию параметра X_FRAME_OPTIONS было изменено с SAMEORIGIN на DENY.

При использовании средства промежуточного программного обеспечения могут быть некоторые представления, для которых не требуется установка заголовка X-Frame-Options. В этих случаях можно использовать декоратор представления, который указывает средству промежуточного программного обеспечения не устанавливать заголовок:

from django.http import HttpResponse
from django.views.decorators.clickjacking import xframe_options_exempt

@xframe_options_exempt
def ok_to_load_in_a_frame(request):
    return HttpResponse("This page is safe to load in a frame on any site.")

Примечание

Если вы хотите отправить форму или получить доступ к cookie сессии внутри фрейма или iframe, вам может потребоваться изменить параметры CSRF_COOKIE_SAMESITE или SESSION_COOKIE_SAMESITE.

Указание X-Frame-Options для каждого представления

Для установки заголовка X-Frame-Options для каждого представления Django предоставляет эти декораторы:

from django.http import HttpResponse
from django.views.decorators.clickjacking import xframe_options_deny
from django.views.decorators.clickjacking import xframe_options_sameorigin

@xframe_options_deny
def view_one(request):
    return HttpResponse("I won't display in any frame!")

@xframe_options_sameorigin
def view_two(request):
    return HttpResponse("Display in a frame if it's from the same origin as me.")

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

Ограничения

Заголовок X-Frame-Options будет защищать от clickjacking только в современных браузерах. Более старые браузеры будут игнорировать заголовок и потребуют других методов предотвращения clickjacking.

Браузеры, поддерживающие X-Frame-Options

  • Internet Explorer 8+
  • Edge
  • Firefox 3.6.9+
  • Opera 10.5+
  • Safari 4+
  • Chrome 4.1+

См. также

Полный список браузеров, поддерживающих X-Frame-Options.

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

Spec-Zone.ru

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