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