======Политика одного и того же происхождения====== Политика одного **и того же источника** — это критически важный механизм безопасности, который ограничивает взаимодействие документа или сценария, загруженного из одного источника , с ресурсом из другого источника. Это помогает изолировать потенциально вредоносные документы, уменьшая возможные векторы атак. Например, он не позволяет вредоносному веб-сайту в Интернете запускать JS в браузере для чтения данных из сторонней службы веб-почты (в которую входит пользователь) или внутренней сети компании (которая защищена от прямого доступа злоумышленника с помощью не имея публичного IP-адреса) и передавая эти данные злоумышленнику. =====Определение происхождения===== Два URL-адреса имеют одинаковое происхождение, если протокол , порт (если указан) и хост одинаковы для обоих. Вы можете увидеть это как «кортеж схемы/хоста/порта» или просто «кортеж». («Кортеж» — это набор элементов, которые вместе составляют целое — общая форма для двойного, тройного, четверного, пятерного и т. д.) В следующей таблице приведены примеры сравнения происхождения с URL-адресом ''http://store.company.com/dir/page.html'': {{tablelayout?rowsHeaderSource=Auto}} |**URL-адрес**|**Исход**|**Причина**| |http://store.company.com/dir2/other.html|То же происхождение|Только путь отличается| | http://store.company.com/dir/inner/another.html|То же происхождение|Только путь отличается| | https://store.company.com/page.html| Отказ|Другой протокол| | http://store.company.com:81/dir/page.html|Отказ|Другой порт %%(http://по умолчанию это порт 80)%% | | http://news.company.com/dir/page.html|Отказ|Другой хост| =====Унаследованное происхождение===== Скрипты, выполняемые на страницах с URL-адресом ''about:blank'' или ''javascript:'', наследуют источник документа, содержащего этот URL-адрес, поскольку эти типы URL-адресов не содержат информации об исходном сервере. Например, ''about:blank'' часто используется как URL-адрес новых пустых всплывающих окон, в которые родительский скрипт записывает контент (например, через механизм ''[[software:development:web:docs:Web:API:Window:open|Window.open()]]''). Если это всплывающее окно также содержит JavaScript, этот сценарий унаследует то же происхождение, что и сценарий, который его создал. ''data:'' URL-адреса получают новый, пустой контекст безопасности. =====Происхождение файлов===== Современные браузеры обычно рассматривают происхождение файлов, загружаемых с использованием ''%%file:///%%'' схемы, как непрозрачное происхождение . Это означает, что если файл включает в себя другие файлы из той же папки (скажем), не предполагается, что они происходят из того же источника и могут вызвать ошибки [[software:development:web:docs:Glossary:CORS|CORS]]. Обратите внимание, что в [[https://url.spec.whatwg.org/#origin|спецификации URL]] указано, что происхождение файлов зависит от реализации, и некоторые браузеры могут рассматривать файлы в одном и том же каталоге или подкаталоге как имеющие одинаковое происхождение, даже если это имеет [[software:development:web:docs:Web:security:advisories:mfsa2019-21#CVE-2019-11730: политика одинакового происхождения рассматривает все файлы в каталоге как имеющие одинаковое происхождение.|последствия для безопасности]] . =====Изменение происхождения===== Предупреждение. Описанный здесь подход (с использованием document.domainустановщика) устарел, поскольку он подрывает защиту безопасности, обеспечиваемую той же политикой происхождения, и усложняет модель происхождения в браузерах, что приводит к проблемам совместимости и ошибкам безопасности. Страница может изменить свое происхождение с некоторыми ограничениями. Сценарий может установить значение [[software:development:web:docs:Web:API:Document:domain|document.domain]] для своего текущего домена или супердомена своего текущего домена. Если установлен супердомен текущего домена, более короткий супердомен используется для проверок того же происхождения. Например, предположим, что сценарий из документа at ''http://store.company.com/dir/other.html'' выполняет следующее: document.domain = "company.com"; После этого страница может пройти проверку того же происхождения с помощью http://company.com/dir/page.html(при условии, что ''http://company.com/dir/page.html'' для нее установлено ''document.domain'' значение ''"company.com"'', чтобы указать, что она желает это разрешить - см. document.domainдополнительную информацию). Однако не ''company.com'' удалось установить , поскольку это не супердомен ''.document.domainothercompany.comcompany.com'' Номер порта проверяется браузером отдельно. Любой вызов ''document.domain'', включая ''document.domain = document.domain'', приводит к перезаписи номера порта на ''null''. Следовательно, невозможно поговорить ''company.com:8080'', ''company.com'' только установив ''document.domain = "company.com"'' первое. Он должен быть установлен в обоих, чтобы оба номера портов были ''null''. Механизм имеет некоторые ограничения. Например, он выдаст ''"SecurityError"'' [[software:development:web:docs:Web:API:DOMException|DOMException]], если включен или документ находится в изолированной программной среде , и изменение источника таким образом не влияет на проверки происхождения, используемые многими веб-API (например , , , ). Более полный список случаев сбоя можно найти в [[software:development:web:docs:Web:API:Document:domain#failures|Document.domain > Отказы]]. [[software:development:web:docs:Web:HTTP:Headers:Permissions-Policy:document-domain|document-domain]] [[software:development:web:docs:Web:HTTP:Headers:Permissions-Policy|Permissions-Policy]] [[software:development:web:docs:Web:HTML:Element:iframe|