Политика одного и того же происхождения

Mariko Kosaka

Политика одного и того же источника — это функция безопасности браузера, которая ограничивает взаимодействие документов и сценариев в одном источнике с ресурсами в другом источнике.

Браузер может загружать и отображать ресурсы с нескольких сайтов одновременно. У вас может быть одновременно открыто несколько вкладок или на сайте может быть встроено несколько iframe с разных сайтов. Если нет ограничений на взаимодействие между этими ресурсами и скрипт скомпрометирован злоумышленником, скрипт может раскрыть все, что находится в браузере пользователя.

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

Что считается одинакового происхождения?

Источник определяется схемой (также известной как протокол, например HTTP или HTTPS), портом (если он указан) и хостом. Если все три URL одинаковы для двух URL-адресов, они считаются имеющими одно и то же происхождение. Например, http://www.example.com/foo имеет тот же источник, что и http ://www.example.com/bar , но не https ://www.example.com/bar , поскольку схема другая.

Что разрешено, а что запрещено?

Как правило, встраивание ресурса из разных источников разрешено, тогда как чтение ресурса из разных источников блокируется.

iframe Встраивание из разных источников обычно разрешено (в зависимости от директивы X-Frame-Options ), но чтение из разных источников (например, использование JavaScript для доступа к документу в iframe) — нет.
CSS CSS из разных источников можно внедрить с помощью элемента <link> или @import в файл CSS. Может потребоваться правильный заголовок Content-Type .
формы URL-адреса перекрестного происхождения можно использовать в качестве значения атрибута action элементов формы. Веб-приложение может записывать данные формы в пункт назначения с несколькими источниками.
изображений Разрешено встраивание изображений из разных источников. Однако чтение данных изображения из разных источников (например, извлечение двоичных данных из изображения из разных источников с помощью JavaScript) блокируется.
мультимедиа Видео и аудио из разных источников можно встроить с помощью элементов <video> и <audio> .
сценарий Могут быть встроены сценарии перекрестного происхождения; однако доступ к определенным API (например, запросам на выборку из разных источников) может быть заблокирован.

TODO: DevSite — подумайте и проверьте оценку

Как предотвратить кликджекинг

кликджекинг
Рисунок: Механизм кликджекинга показан в трех отдельных слоях (базовый сайт, сайт в рамке, прозрачная кнопка).

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

Чтобы запретить другим сайтам встраивать ваш сайт в iframe, добавьте в HTTP-заголовки политику безопасности контента с директивой frame-ancestors .

Альтернативно вы можете добавить X-Frame-Options в заголовки HTTP, список опций см. в MDN .

Заворачивать

Надеюсь, вы почувствуете небольшое облегчение от того, что браузеры усердно работают над обеспечением безопасности в Интернете. Несмотря на то, что браузеры пытаются обезопасить себя, блокируя доступ к ресурсам, иногда вам может потребоваться доступ к ресурсам перекрестного происхождения в ваших приложениях. В следующем руководстве вы узнаете о совместном использовании ресурсов из разных источников (CORS) и о том, как сообщить браузеру, что загрузка ресурсов из разных источников разрешена из доверенных источников.