Spec-Zone.ru › Django 4.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 в значение 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 защитит от кликджекинга только в современных браузерах. Более старые браузеры проигнорируют заголовок и потребуют другие методы предотвращения кликджекинга.

Браузеры, поддерживающие 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/4.2/ref/clickjacking/

Spec-Zone.ru

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