Что такое политика одного источника (Same Origin Policy)?nodejs-196

Same Origin Policy (SOP) — это критически важный механизм безопасности в веб-браузерах, который ограничивает взаимодействие между ресурсами с разных источников. Он предотвращает выполнение потенциально опасных межсайтовых запросов, защищая пользователей от атак, таких как CSRF (Cross-Site Request Forgery) или утечки данных.

Что считается "одинаковым источником"?

Два URL считаются имеющими одинаковый источник, если у них совпадают:

  1. Протокол (например, http:// или https://)
  2. Домен (например, example.com)
  3. Порт (например, :80 для HTTP или :443 для HTTPS по умолчанию)

Примеры:

// Same Origin
https://example.com/page1 и https://example.com/page2

// Different Origin (разные протоколы)
http://example.com и https://example.com

// Different Origin (разные домены)
https://example.com и https://sub.example.com

// Different Origin (разные порты)
https://example.com и https://example.com:8080

Как SOP влияет на веб-разработку?

  1. AJAX-запросы: Браузер блокирует запросы между разными источниками.

    // Запрос с example.com к api.another.com будет заблокирован
    fetch('https://api.another.com/data')
      .then(response => response.json())
      .then(data => console.log(data)); // Ошибка CORS
    
  2. Доступ к DOM: Скрипты с одного сайта не могут получить доступ к DOM другого сайта в iframe.

  3. Cookies/Storage: Данные хранилища изолированы для каждого источника.

Обход SOP

Для легитимных межсайтовых запросов используются:

  • CORS (Cross-Origin Resource Sharing) — сервер явно указывает разрешенные источники в заголовках.
  • JSONP (устаревший метод для GET-запросов).
  • Прокси-сервер — ваш сервер выступает посредником.
  • postMessage API — безопасная коммуникация между окнами/iframe.

Пример CORS-заголовков:

Access-Control-Allow-Origin: https://your-site.com
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type

Исключения из SOP

Некоторые ресурсы могут загружаться кросс-доменно:

  • <img src="...">
  • <script src="..."> (но код выполняется в контексте текущего источника)
  • <link rel="stylesheet">
  • Встраиваемый медиаконтент (<video>, <audio>)

Резюмируем

SOP — фундаментальный механизм безопасности браузеров, который предотвращает межсайтовые атаки, ограничивая взаимодействие между разными источниками. Для легитимных кросс-доменных запросов используются специальные технологии вроде CORS, а понимание SOP критически важно для разработки безопасных веб-приложений.