Что такое политика одного источника (SOP)

В этой статье расскажем базу о SOP: зачем нужна эта политика, как она работает и почему обеспечивает безопасность, но ограничивает возможности разработки веб-приложений.

Что такое SOP

Политика одного источника (SOP) — это механизм, которым веб-браузеры ограничивают возможность взаимодействия скрипта, загруженного с одного сайта, с контентом других сайтов. Это ключевой аспект безопасности веб-приложений, который защищает пользовательские данные от различных атак межсайтового скриптинга (XSS) и других угроз.

Принцип работы SOP

Давайте зайдем с метафоры. Представим, что в нашем городе разные районы, и в каждом районе есть свой магазин. Предположим, что нам нужно купить баночку Red Bull, но есть строгое правило: вы можем покупать энергетик только в магазине своего района. Если мы попытаемся купить Red Bull в магазине другого района, нам этого не позволят сделать. А теперь следим за магией. Районы — это веб-сайты, а магазины — серверы, которые предоставляют веб-страницы и информацию. Политика одного источника гарантирует, что скрипт (например, JavaScript), работающий на одной веб-странице, не может просто так перейти и взять информацию с другого веб-сайта. Он должен «покупать Red Bull» только в «магазине» своего «района» (домена). Это правило помогает защитить личную информацию от злоумышленников, которые могут попытаться её украсть, замаскировавшись под другой веб-сайт. Вот несколько примеров:

  • Загруженный с https://example.com/page.html JavaScript-скрипт не может отправить запросы на https://another-domain.com/api/data → поскольку домен источник отличается.

  • Если JavaScript-скрипт на https://example.com:80 пытается обратиться к https://example.com:8080→ запрос будет заблокирован, так как отличается порт.

  • Загруженный с http://example.com/page.html скрипт не может прочитать содержимое страницы https://example.com/secure-page.html → так как здесь разницы в протоколах (http vs https).

Почему SOP ограничивает разработчиков

SOP накладывает ограничения на то, как скрипты на одной веб-странице могут взаимодействовать с ресурсами других доменов. Это создает несколько проблем:

  1. Разработчикам сложно интегрировать внешние API или ресурсы в свои приложения без обхода SOP, например, через JSONP или серверный прокси.

  2. SOP ограничивает традиционные AJAX-запросы к сервисам, расположенным на других доменах. Это может усложнить или замедлить разработку.

  3. Некоторые приложения рассчитаны на разделение кода, ресурсов и данных между разными доменами. Тут тоже возникают проблемы с политикой.

  4. Веб-приложения, развернутые на поддоменах одного и того же главного домена, также ограничены SOP и требуют дополнительных настроек для обмена данными.

  5. SOP может усложнить процесс отладки и тестирования веб-приложений, особенно когда разработка ведется локально, а ресурсы в инете.

Чтобы преодолеть эти ограничения, иногда используют CORS (Cross-Origin Resource Sharing). Методика который позволяет создавать более гибкие запросы к другим доменам, при условии, что другой домен разрешает такой доступ.

Last updated