Spec-Zone.ru › Django 3.2

Защита от Clickjacking

Средство промежуточного слоя и декораторы для 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'

При использовании средства промежуточного слоя могут быть некоторые представления, для которых вам не нужно устанавливать заголовок 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.")

Примечание

Если вы хотите отправить форму или получить доступ к куки сессии внутри рамки или 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.2/ref/clickjacking/

Spec-Zone.ru

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