Політика того ж походження

Політика того ж походження (англ. same origin policy) — важливе поняття в програмуванні скриптів на стороні клієнта (наприклад в мові JavaScript). Політика дозволяє скриптам, які працюють на сторінках, що згенеровані на одному сайті, отримати доступ до методів та атрибутів один одного без особливих обмежень, але забороняє доступ до більшості методів та властивостей на сторінках інших сайтів.[1]

Цей механізм дуже важливий для сучасних веб-застосунків які покладаються на куки для зберігання даних сесій авторизованих користувачів, і дія серверів залежить від інформації, що зберігається в куках. На стороні клієнта повинно бути суворе відмежування від даних, наданим непов'язаними сайтами щоб запобігти втраті конфіденційних даних.

Історія

Політика того ж походження з'явилась ще в часи Netscape Navigator 2.0. Пізніше вона поширилась на інші скриптові мови, наприклад Adobe Flash, чи на механізми окрім прямої маніпуляції DOM, такі як XMLHttpRequest.

Правила визначення джерела

Термін «походження» (англ. origin) визначається через доменне ім'я, протокол прикладного рівня, та (в більшості браузерах) номер порту HTML документа який виконує скрипт. Два ресурси мають однакове походження тоді і тільки тоді коли кожне з цих значень для них однакове. Для прикладу, наступна таблиця дає огляд типових результатів перевірок для URL «http://www.example.com/dir/page.html».

URL з яким порівнюють Результат Причина
http://www.example.com/dir/page.html Успішно Однаковий протокол і хост
http://www.example.com/dir2/other.html Успішно Однаковий протокол і хост
http://www.example.com:81/dir/other.html Невдача Різні порти
https://www.example.com/dir/other.html Невдача Різні протоколи
http://en.example.com/dir/other.html Невдача Різні хости
http://example.com/dir/other.html Невдача Різні хости (потрібен повний збіг)
http://v2.www.example.com/dir/other.html Невдача Різні хости (потрібен повний збіг)

Додаткова логіка document.domain

Важливим розширенням до політики того ж джерела реалізованим для доступу до DOM в JavaScript (але не для інших перевірок єдиності походження) є те, що два сайти, які мають спільний домен вищого рівня, можуть прийняти рішення про комунікацію незважаючи на невдачу перевірки на єдиність хоста, спільно присвоївши відповідним атрибутам document.domain однаковий підходящий фрагмент правої сторони їх поточних доменних імен.

Наприклад, якщо http://en.example.com/ та http://fr.example.com/ разом присвоять document.domain значення «example.com», вони будуть вважатись одного походження під час маніпуляцій з DOM.

Крайні випадки та винятки

Поведінка перевірки збігу походжень та пов'язані механізми не дуже добре описані в численних крайових випадках, наприклад для протоколів, що не мають добре означеного доменного імені чи порту пов'язаними з їх URL (file://, data://, і т. ін.). Це спричинило велику кількість проблем з безпекою, таких як загалом небажана здатність будь-якого локального HTML файлу мати доступ до інших файлів на диску чи спілкуватись з будь-яким сайтом в інтернеті.

На додачу, багато застарілих крос-доменних операцій, що передували JavaScript, не піддаються перевіркам на походження даних; одним з прикладів є здатність імпортувати скрипти з інших доменів (JSONP) чи відправляти POST форми. JSONP є популярною крос-доменною альтернативою XMLHttpRequest (Ajax).

Обхідні шляхи

Щоб дозволити розробникам у контрольований спосіб обійти політику єдиного походження, існують багато хаків, таких як використання ідентифікатора фрагмента, чи використання властивості window.name для передачі даних між документами з різних доменів. У стандарті HTML5 створено офіційний інтерфейс postMessage, який щоправда доступний тільки на нових браузерах. Також для AJAX-подібних запитів до інших доменів можна використовувати технології JSONP та Cross-Origin Resource Sharing.[2]

Для підтримки старіших браузерів можна використовувати бібліотеку easyXDM[3], яка надає API до інтерфейсу postMessage та інших хаків що використовуються для крос-доменного обміну повідомленнями (англ. Cross Domain Messaging (XDM)).

Див. також

Зноски

  1. http://www.w3.org/Security/wiki/Same_Origin_Policy
  2. Blog Post: Using CORS with all (modern) browsers. Архів оригіналу за 15 липня 2013. Процитовано 9 жовтня 2011.
  3. http://easyxdm.net

Посилання

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.