Аббревиатура SOP в веб-безопасности расшифровывается как «Same-Origin Policy» (Политика одного источника). Политика одного источника — это основополагающая концепция безопасности, реализуемая веб-браузерами для ограничения взаимодействия документов или скриптов, загруженных из одного источника, с ресурсами из другого. Этот механизм является неотъемлемой частью модели веб-безопасности, поскольку он предназначен для предотвращения доступа вредоносных скриптов на одной странице к конфиденциальным данным на другой веб-странице через браузер.
Определение происхождения
В контексте политики единого источника (Some-Origin Policy) «источник» определяется как комбинация протокола (схемы), хоста (домена) и порта URL-адреса. Два URL-адреса считаются имеющими один и тот же источник только в том случае, если все три компонента полностью совпадают. Например, URL-адреса `https://www.example.com:443/page1.html` и `https://www.example.com:443/page2.html` имеют один и тот же источник. Однако следующие URL-адреса считаются разными источниками:
– `http://www.example.com` против `https://www.example.com` (разная схема)
– `https://www.example.com` против `https://sub.example.com` (разный хост)
– `https://www.example.com:443` против `https://www.example.com:8443` (разный порт)
Цель и роль веб-безопасности
Политика единого источника (Same-Origin Policy) — это защитная мера, которая предотвращает несколько видов атак, в частности межсайтовый скриптинг (XSS) и подделку межсайтовых запросов (CSRF). Без такой политики любой веб-сайт, открытый во вкладке браузера, мог бы свободно читать или изменять содержимое любого другого сайта, открытого пользователем, включая личную информацию и учётные данные сеанса.
Например, если бы SOP не существовало, вредоносный веб-сайт мог бы создать скрытый iframe, который загружает сайт онлайн-банкинга пользователя, получать доступ к аутентифицированному сеансу пользователя и читать или манипулировать привилегированной информацией без согласия пользователя.
Что ограничивает СОП
Политика единого источника ограничивает несколько типов взаимодействия между ресурсами из разных источников. Основные элементы управления доступом включают:
– Доступ к DOM: Скриптам из одного источника запрещён доступ к объектной модели документа (DOM) документов, загруженных из другого источника. Это означает, например, что JavaScript, работающий на сайте `site-a.com`, не сможет читать DOM страницы, загруженной с сайта `site-b.com`.
– Файлы cookie и локальное хранилище: Браузеры обеспечивают соблюдение SOP, гарантируя, что скрипты могут читать и записывать только файлы cookie, локальное хранилище и хранилище сеансов, связанные с их собственным источником.
– AJAX-запросы: XMLHttpRequest и Fetch API подчиняются SOP, поэтому скрипт может отправлять запросы только к ресурсам в пределах своего собственного источника, если только целевой сервер не использует заголовки Cross-Origin Resource Sharing (CORS) для явного разрешения запроса.
– Контекст выполнения JavaScript: Контексты выполнения изолируются в зависимости от источника, чтобы предотвратить влияние кода из одного источника на другой.
Практические примеры
Пример 1: Запрет доступа к DOM
Если у пользователя в браузере открыты две страницы:
– Страница A: `https://bank.example.com/account.html`
– Страница B: `https://evil.com/steal.html`
Скрипт, работающий на `evil.com`, не может использовать JavaScript для проверки или манипулирования содержимым открытой вкладки `account.html` или iframe, поскольку их источники различаются.
Пример 2: AJAX-запросы и CORS
Предположим, скрипт на сайте `https://news.example.com` пытается получить конфиденциальную информацию из `https://private.example.com/data.json`, используя XMLHttpRequest или API Fetch. Если `private.example.com` не содержит подходящий заголовок CORS (например, `Access-Control-Allow-Origin: https://news.example.com`), браузер заблокирует запрос, применяя стандартную операционную процедуру (SOP).
Пример 3: Изоляция файлов cookie
Файлы cookie, установленные одним источником, недоступны скриптам, работающим в другом источнике. Например, сеансовый файл cookie для `https://mail.example.com` недоступен для JavaScript, работающего на `https://shopping.example.com`, даже если оба являются поддоменами `example.com`, если только это не указано специально с помощью атрибута domain и флагов HTTPOnly/secure.
Исключения и послабления
Существуют механизмы, с помощью которых можно смягчить SOP, но они требуют явного сотрудничества со стороны целевого сервера и разработаны так, чтобы быть безопасными:
– Совместное использование ресурсов между источниками (CORS): CORS — это протокол, позволяющий серверам указывать, кто может получить доступ к их ресурсам, через дополнительные HTTP-заголовки. С помощью CORS сервер может разрешить определённым источникам (или всем источникам) обходить SOP для определённых ресурсов.
– Документ.домен: Для поддержки устаревших версий поддомены в пределах одного родительского домена могут установить для своего свойства `document.domain` общее значение, что позволяет в некоторой степени смягчить требования стандартной операционной процедуры (SOP) для доступа к DOM. Однако этот подход всё чаще не рекомендуется из-за его сложности и проблем с безопасностью.
– API postMessage: Для обеспечения безопасной кросс-доменной связи браузеры предоставляют функцию `window.postMessage()`, позволяющую скриптам из разных источников отправлять сообщения без прямого доступа к DOM.
– JSONP (JSON с заполнением): Исторически JSONP был способом обойти ограничения SOP, позволяя извлекать данные с помощью динамических ` ` tags. Because script tags are not subject to SOP, they can fetch and execute JavaScript from other origins. However, JSONP is mostly obsolete today due to security risks and the widespread adoption of CORS.
– Изолированные фреймы: HTML5 позволяет изолировать iframes, ограничивая или разрешая определенные возможности, включая выполнение скриптов и отправку форм, тем самым контролируя влияние SOP.
Ограничения и соображения безопасности
Хотя СОП является надежным механизмом безопасности, он не лишен ограничений и проблем:
– Сложность современных веб-приложений: Растущая сложность современных веб-приложений, а также всё более широкое использование API и сторонних ресурсов часто приводят к необходимости кросс-доменных запросов. Это увеличивает зависимость от таких механизмов, как CORS, что, в свою очередь, может приводить к ошибкам конфигурации, приводящим к уязвимостям.
– Захват поддомена: Если организация не управляет своими поддоменами надлежащим образом, злоумышленник потенциально может захватить поддомен и использовать ослабление SOP через `document.domain` для атаки на другие поддомены.
– Обходы СОП: Уязвимости браузера, неправильные настройки или намеренно ослабленные политики могут привести к обходу SOP. Злоумышленники активно ищут такие уязвимости, особенно в реализациях браузера и плагинах.
– Устаревшие API: В некоторых старых API-интерфейсах браузеров, таких как Flash или Java-апплеты, исторически соблюдались менее строго стандарты операционных процедур (SOP), что приводило к появлению дополнительных векторов атак.
Влияние на дизайн веб-приложений
Веб-разработчики должны разрабатывать свои сайты с учётом стандартных операционных процедур (СОП). Ключевые моменты включают:
– Обеспечение доступа к конфиденциальным ресурсам только из доверенных источников, желательно из одного источника.
– Реализация политик CORS с минимальным риском, разрешающая только известные и доверенные источники вместо использования подстановочных знаков.
– Избегать ненужного ослабления СОП с помощью таких механизмов, как `document.domain`.
– Использование защищенных файлов cookie (флаги `HttpOnly` и `Secure`) для снижения рисков потенциальных обходов SOP.
– Использование заголовка `Content Security Policy` (CSP) для снижения риска XSS, который может быть использован для обхода SOP при определенных обстоятельствах.
Эволюция и будущие направления
Политика единого источника (Same-Origin Policy) была основополагающим элементом безопасности браузера с самого начала существования интернета. Её значение только возросло с распространением клиентских приложений и облачных сервисов. Внедрение CORS, Content Security Policy и других HTTP-заголовков представляет собой непрерывную работу по достижению баланса между удобством использования и безопасностью, позволяя контролировать и проверять взаимодействие между источниками.
Производители браузеров продолжают совершенствовать SOP и связанные с ними механизмы, устраняя новые классы атак и разрабатывая новые API для безопасной кросс-доменной связи, такие как «Service Workers», «Web Workers» и безопасные механизмы хранения.
Политика единого источника (SOP) — это основополагающая мера безопасности браузера, ограничивающая взаимодействие скриптов и ресурсов из разных источников. Устанавливая строгие правила доступа к DOM, файлам cookie, AJAX-запросам и другим критически важным операциям, SOP помогает сдерживать воздействие вредоносных скриптов и защищать пользовательские данные. Взаимодействие SOP с такими протоколами, как CORS, и связанные с ним ограничения — ключевые факторы, которые должен учитывать любой опытный специалист в области веб-безопасности.
Другие недавние вопросы и ответы, касающиеся Безопасность передовых компьютерных систем EITC/IS/ACSS:
- Каковы некоторые проблемы и компромиссы, связанные с внедрением аппаратных и программных средств защиты от атак по времени при сохранении производительности системы?
- Какую роль предсказатель ветвления играет в атаках по таймингу процессора и как злоумышленники могут манипулировать им для утечки конфиденциальной информации?
- Как программирование с постоянным временем может помочь снизить риск атак по времени в криптографических алгоритмах?
- Что такое спекулятивное выполнение и как оно повышает уязвимость современных процессоров к атакам по времени, таким как Spectre?
- Как тайминговые атаки используют изменения во времени выполнения для получения конфиденциальной информации из системы?
- Чем концепция согласованности разветвления отличается от согласованности выборки-изменения и почему согласованность разветвления считается самой сильной достижимой согласованностью в системах с ненадежными серверами хранения?
- Каковы проблемы и потенциальные решения для реализации надежных механизмов контроля доступа для предотвращения несанкционированных изменений в общей файловой системе на ненадежном сервере?
- В контексте ненадежных серверов хранения, каково значение ведения согласованного и поддающегося проверке журнала операций и как этого можно достичь?
- Как криптографические методы, такие как цифровые подписи и шифрование, могут помочь обеспечить целостность и конфиденциальность данных, хранящихся на ненадежных серверах?
- Что такое византийские серверы и какую угрозу они представляют для безопасности систем хранения данных?
Посмотреть больше вопросов и ответов в EITC/IS/ACSS Advanced Computer Systems Security

