Spec-Zone.ru › Django 2.0

Защита от Clickjacking

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

Пример clickjacking

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

Предотвращение clickjacking

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

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

Spec-Zone.ru

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