Spec-Zone.ru › Django 2.2

Защита от кликджекинга

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

Пример кликджекинга

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

Предотвращение кликджекинга

Современные браузеры поддерживают 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 в значение SAMEORIGIN для каждого исходящего HttpResponse. Если вам нужен DENY, установите настройку X_FRAME_OPTIONS:

X_FRAME_OPTIONS = '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 будет защищать от кликджекинга только в современных браузерах. Более старые браузеры игнорируют заголовок и требуют других методов защиты от кликджекинга.

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

  • Internet Explorer 8+
  • 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/2.2/ref/clickjacking/

Spec-Zone.ru

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