Політика того ж походження (англ. same origin policy) — важливе поняття в програмуванні скриптів на стороні клієнта (наприклад в мові JavaScript). Політика дозволяє скриптам, які працюють на сторінках, що згенеровані на одному сайті, отримати доступ до методів та атрибутів один одного без особливих обмежень, але забороняє доступ до більшості методів та властивостей на сторінках інших сайтів.[1]
Цей механізм дуже важливий для сучасних вебзастосунків, які покладаються на куки для зберігання даних сесій авторизованих користувачів, і дія серверів залежить від інформації, що зберігається в куках. На стороні клієнта повинно бути суворе відмежування від даних, наданим непов'язаними сайтами, щоб запобігти втраті конфіденційних даних.
Політика того ж походження з'явилась ще в часи Netscape Navigator 2.0. Пізніше вона поширилась на інші скриптові мови, наприклад Adobe Flash, чи на механізми окрім прямої маніпуляції DOM, такі як XMLHttpRequest.
Термін «походження» (англ. origin) визначається через доменне ім'я, протокол прикладного рівня, та (в більшості браузерах) номер порту HTML документа який виконує скрипт. Два ресурси мають однакове походження тоді і тільки тоді коли кожне з цих значень для них однакове. Для прикладу, наступна таблиця дає огляд типових результатів перевірок для URL «http://www.example.com/dir/page.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]
window.name
postMessage
Для підтримки старіших браузерів можна використовувати бібліотеку easyXDM[3], яка надає API до інтерфейсу postMessage та інших хаків що використовуються для крос-доменного обміну повідомленнями (англ. Cross Domain Messaging (XDM)).
{{cite web}}
Lokasi Pengunjung: 3.138.34.66