Spec-Zone.ru › Django 5.1

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

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

Примечание

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

Изменено в Django 5.0:

Добавлена поддержка обертывания асинхронных функций представления в декораторе @xframe_options_exempt.

Установка 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.")

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

Изменено в Django 5.0:

Добавлена поддержка обертывания асинхронных функций представления в декораторах @xframe_options_deny и @xframe_options_sameorigin.

Ограничения

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

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

Spec-Zone.ru

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