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

### Что такое SOP&#x20;

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

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

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

* Загруженный с `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 ограничивает разработчиков&#x20;

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

1. Разработчикам сложно интегрировать внешние API или ресурсы в свои приложения без обхода SOP, например, через JSONP или серверный прокси.
2. SOP ограничивает традиционные AJAX-запросы к сервисам, расположенным на других доменах. Это может усложнить или замедлить разработку.
3. Некоторые приложения рассчитаны на разделение кода, ресурсов и данных между разными доменами. Тут тоже возникают проблемы с политикой.
4. Веб-приложения, развернутые на поддоменах одного и того же главного домена, также ограничены SOP и требуют дополнительных настроек для обмена данными.
5. SOP может усложнить процесс отладки и тестирования веб-приложений, особенно когда разработка ведется локально, а ресурсы в инете.

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