SOP: Что такое Same-origin policy

Источник: «Same-origin policy (SOP)»
В этой статье мы разберёмся, что такое Same-origin policy (SOP) - Политика единого источника и как она реализована.

Same-origin policy — механизм безопасности веб-браузера, направленный на предотвращение атак веб-сайтов с других сайтов.

Same-origin policy ограничивает доступ сценариев из одного источника к данным другого источника. Источник состоит из URI схемы, домена и номера порта. Например, рассмотрим следующий URL адрес:

http://normal-website.com/example/example.html

Он использует схему http, домен normal-website.com и порт номер 80. В следующей таблице показано, как будет применяться Same-origin policy, если контент по указанному выше адресу пытается получить доступ к другим источникам:

Доступ к URL-адресуДоступ разрешён?
http://normal-website.com/example/Да: та же схема, домен и порт
http://normal-website.com/example2/Да: та же схема, домен и порт
https://normal-website.com/example/Нет: другая схема и порт
http://en.normal-website.com/example/Нет: другой домен
http://www.normal-website.com/example/Нет: другой домен
http://normal-website.com:8080/example/Нет: другой домен*
* Internet Explorer разрешит доступ к этому адресу, потому что EI не учитывает номер порта при применении Same-origin policy.

Зачем нужен Same-origin policy

Когда браузер отправляет HTTP-запрос из одного источника в другой, любые cookie, включая cookie сессии аутентификации, относящиеся к другому домену, также отправляются как часть запроса. Это означает, что ответ будет сгенерирован в рамках сеанса пользователя и будет включать любые релевантные данные, специфичные для пользователя. Без Same-origin policy, если вы посетите вредоносный файл, он сможет читать ваши электронные письма из Gmail, личные сообщения из социальных сетей и т.д.

Как Same-origin policy реализован

Same-origin policy обычно контролирует доступ JavaScript кода к содержимому загружаемому между доменами. Как правило, разрешена загрузка ресурсов страницы из разных источников. Например, SOP позволяет встраивать изображения с помощью тега <img>, медиафайлы с помощью тега <video>, а JavaScript подключается с помощью <script>. Хотя все эти ресурсы могут быть загружены страницей, не каждый JavaScript код на странице сможет прочитать эти данные.

Существуют различные исключения Same-origin policy:

Из-за устаревших требований same-origin policy является более мягкой при работе с cookie файлами, поэтому они часто доступны со всех поддоменов сайта, даже если каждый поддомен технические имеет другое происхождение. Вы можете частично снизить этот риск, используя cookie флаг HttpOnly.

Можно смягчить same-origin policy используя document.domain. Это специальное свойство позволяет смягчить SOP для определённого домена, но только если он является частью вашего FQDN (полного доменного имени). Например, у вас может быть домен marketing.example.com, и вы хотели бы прочитать содержимое этого домена на example.com. Тогда SOP разрешит доступ между двумя доменами, несмотря на их различное происхождение. Раньше можно было установить для document.domain TLD, такой, как com, что разрешало доступ любым доменам в одном и том же TLD, но теперь современные браузеры запрещают это.

Дополнительные материалы

Предыдущая Статья

Laravel: Погружение в Уведомления / Notifications

Следующая Статья

PHP: Добавьте ИИ в проект с помощью OpenAI