Защита от кликджекинга
Средства промежуточного программного обеспечения и декораторы для защиты от кликджекинга. Этот тип атаки происходит, когда вредоносный сайт обманывает пользователя, заставляя его нажать на скрытый элемент другого сайта, который загружен в скрытой фрейме или iframe.
Пример кликджекинга
Представьте, что интернет-магазин имеет страницу, на которой авторизованный пользователь может нажать «Купить сейчас», чтобы приобрести товар. Пользователь решил оставаться авторизованным на сайте для удобства. Вредоносный сайт может создать кнопку «Мне нравятся пони» на одной из своих страниц и загрузить страницу магазина в прозрачный iframe так, чтобы кнопка «Купить сейчас» была невидимо наложена на кнопку «Мне нравятся пони». Если пользователь посетит вредоносный сайт, нажав «Мне нравятся пони», произойдёт непроизвольное нажатие на кнопку «Купить сейчас», и произойдёт незапланированная покупка товара.
Предотвращение кликджекинга
Современные браузеры поддерживают HTTP-заголовок X-Frame-Options, который указывает, разрешено ли ресурсу загружаться в фрейме или iframe. Если ответ содержит заголовок со значением SAMEORIGIN , то браузер будет загружать ресурс в фрейм только в том случае, если запрос исходит с того же сайта. Если заголовок установлен на DENY , то браузер заблокирует загрузку ресурса в фрейме независимо от того, какой сайт инициировал запрос.
Django предоставляет несколько простых способов включения этого заголовка в ответы с вашего сайта:
- Простой модуль промежуточного программного обеспечения, который устанавливает заголовок во всех ответах.
- Набор декораторов представлений, которые могут использоваться для переопределения модуля промежуточного программного обеспечения или для установки заголовка только для определённых представлений.
Заголовок 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.")
Установить 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.1/ref/clickjacking/