Same-Origin Policy ограничивает взаимодействие страницы со страницами и ресурсами другого origin. Для обычных HTTP-адресов origin задается схемой, хостом и портом, а не путем. Особенно важно ограничение чтения чужих данных скриптом. SOP не запрещает вообще все межсайтовые запросы; CORS позволяет явно разрешать определенное чтение, а CSRF требует отдельной защиты.
Что такое SOP — Same-Origin Policy?
Политика одного источника в браузере: что входит в origin, какие межсайтовые действия ограничиваются и почему SOP не заменяет защиту от CSRF.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Same-Origin Policy, или политика одного источника, — механизм браузерной изоляции. Он не позволяет скрипту одной страницы произвольно читать данные другого источника и управлять его документом.
Для HTTP-адресов origin — сочетание схемы, хоста и порта. Например, https://example.com/a и https://example.com/b относятся к одному origin. Замена HTTPS на HTTP, хоста на api.example.com или порта на 8443 создает другой origin. Путь и параметры запроса в это сравнение не входят.
Нельзя сводить SOP к запрету любых запросов на другой сайт. Навигация, отправка некоторых форм и встраивание ряда ресурсов допускаются, но чтение ответа скриптом ограничивается. Это различие подробно описано в MDN: Same-origin policy.
CORS позволяет серверу явно обозначить разрешенный межсайтовый доступ в поддерживаемых браузером сценариях. Он не заменяет аутентификацию и проверку полномочий на сервере. Клиент вне браузера не обязан применять браузерную SOP.
CSRF — отдельная проблема: нежелательное действие может быть запущено запросом даже тогда, когда атакующая страница не умеет прочитать ответ. Поэтому нужны соответствующие защита запросов и политика cookies.
Не путайте origin и site: правила SameSite для cookies используют другое понятие границы. На интервью полезно сначала объяснить, кто применяет ограничение, затем разобрать конкретные адреса и только после этого обсуждать исключения. Отключение браузерной защиты не является исправлением неверной настройки приложения.