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

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

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

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

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

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

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

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

X-Frame-OptionsHTTP заголовок будет установлен только с помощью промежуточного программного или просмотреть декораторов , если он уже не присутствует в ответе.

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

Настройка 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.

Настройка 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 в современном браузере. Старые браузеры незаметно игнорируют заголовок и нуждаются в других методах предотвращения кликджекинга .

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

  • Internet Explorer 8+
  • Край
  • Firefox 3.6.9+
  • Opera 10.5+
  • Safari 4+
  • Chrome 4.1+

Также

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

Copyright ©2021 All rights reserved