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

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Політика того ж походження (англ. 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)).

Дивіться також[ред.ред. код]

Зноски[ред.ред. код]

Посилання[ред.ред. код]