Spec-Zone.ru › Django 1.8

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

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

MIDDLEWARE_CLASSES = (
    ...
    '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/1.8/ref/clickjacking/

Spec-Zone.ru

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