Видео и субтитры · Загрузчик медиафайлов по прямой ссылке
Краткая история политики одного и того же происхождения и CORS в веб-браузерах
· Фон
корс веб-история безопасность
Правило, запрещающее браузерному инструменту свободно читать файлы другого сайта, восходит к самым ранним браузерам со сценариями. В этом посте прослеживается политика одного и того же источника, XMLHttpRequest и стандарт CORS, которые в конечном итоге сделали возможной контролируемую межсайтовую выборку.
Почему браузер отказывается передать вашей вкладке только что полученные байты — повседневный эффект правила десятилетней давности
Браузер может отображать удаленный файл, но отказываться передавать тело ответа на страницу JavaScript. Очевидным противоречием является разделение безопасности между навигацией и программным чтением из разных источников.
Direct Media Downloader сталкивается с этим правилом, поскольку ему необходимо считывать фрагменты в большой двоичный объект. Встроенная ссылка на сохранение может работать там, где не удается выполнить выборку, поскольку она следует по другому пути браузера. Отказ защищает файлы cookie и ресурсы интрасети в других частях браузера, хотя этот конкретный загрузчик намеренно опускает учетные данные в своих собственных вызовах. Граница защищает несвязанные файлы cookie и страницы интрасети в одном браузере, даже если в этом конкретном запросе учетные данные не указаны.
Netscape, JavaScript и первое правило происхождения — проблема безопасности, которая привела к использованию политики одного и того же происхождения.
Ранние веб-скрипты требовали запретить одному сайту читать конфиденциальные страницы другого сайта через внешний доступ посетителя. Браузеры организовали эту границу вокруг источников.
Исторические детали различаются в зависимости от реализации, поэтому практическое наследование имеет наибольшее значение: схема, хост и порт определяют доверенный отсек для ресурсов, читаемых скриптами. Рассматривание источника как единого целого было инженерной границей, которую можно было последовательно применять во всех документах, сценариях и сетевых API. Группировка по источникам обеспечивала обязательную единицу, которую браузерные механизмы могли применять к документам, сценариям, хранилищам и ответам сети. Модель несовершенна, но дает разработчикам предсказуемые настройки по умолчанию, а не неограниченные полномочия.
XMLHttpRequest и изолированная сеть — как скриптовые запросы унаследовали правило и почему гибридные приложения не справлялись
XMLHttpRequest включил фоновую работу HTTP, но сохранил ограничения происхождения. Это сделало приложения, расположенные на одном сайте, полезными, в то время как межсайтовые гибридные приложения требовали сотрудничества или серверных посредников.
Переопределение универсального клиента разрушило бы защиту. Серверу, владеющему целью, нужен был способ указать, какие внешние источники могут читать выбранные ответы. Серверные ретрансляции стали обычным обходным решением, но они перенесли риск доверия, пропускной способности и подделки запросов на инфраструктуру за пределами изолированной программной среды браузера. Обходные пути ретрансляции позволили вывести полосу пропускания, доверие и риск подделки запросов на стороне сервера за пределы изолированной программной среды клиента, а не устранить политику. Этим посредникам необходимы собственные средства обеспечения безопасности, конфиденциальности и контроля злоупотреблений, когда они используются намеренно.
Стандарт CORS — как заголовки контроля доступа позволяют серверу выбирать чтение из разных источников, не нарушая настройки по умолчанию.
CORS обеспечивает это взаимодействие через заголовки ответов HTTP, интерпретируемые браузерами. `Access-Control-Allow-Origin` может авторизовать запрашивающий источник или, в подходящих случаях, не требующих учетных данных, более широкую аудиторию.
Этот механизм не отключает политику одного и того же происхождения глобально. Он предоставляет ограниченный доступ для чтения к ответам, хост которых решает предоставить их в соответствии с протоколом. Результаты предварительной проверки могут кэшироваться браузером в соответствии с правилами протокола, поэтому аудит не должен делать вывод о том, что «проверка политики никогда не проводилась» на основе одной «теплой» трассировки. Это сохраняет изоляцию по умолчанию, позволяя владельцам ресурсов публиковать преднамеренное исключение для выбранных вызывающих объектов и методов.
Предварительная проверка, простые запросы и непрозрачные ответы — словарь, который объясняет большинство сбоев при загрузке.
Некоторые запросы из разных источников достаточно просты и не требуют предварительной проверки; другие сначала отправляют OPTIONS, чтобы узнать, разрешены ли метод и заголовки. Предполетная подготовка — это переговоры, а не фактическая передача средств массовой информации.
Непрозрачные ответы возникают в режиме no-cors и скрывают статус, заголовки и тело из сценария. ToolAcre не выбирает этот режим, поскольку нечитаемое тело не может стать предназначенным для сохранения Blob. Ошибка CORS может сосуществовать с успешным запросом на стороне сервера, что еще раз подтверждает, что сбой приложения не означает, что источник ничего не получил. Сохраненные в кэше предполетные решения могут изменить то, что появляется в одном теплом следе, поэтому историческое отсутствие OPTIONS не является доказательством того, что переговоров никогда не существовало.
Что CORS означает для загрузчика только для браузера — решает хост, инструмент не может переопределить, и честность в этом вопросе — правильный ответ
Для этого загрузчика хост решает, доступны ли для чтения ответы HEAD и GET. ToolAcre не может прикрепить заголовок ответа разрешения источника от имени хоста и не будет ретранслировать тело через свой собственный источник.
Ошибка сочетает в себе CORS и сетевые возможности, поскольку Fetch намеренно скрывает подробную информацию в некоторых сбоях. DevTools может раскрыть посетителю больше, чем получает код приложения. Операторы хоста должны авторизовать только предполагаемые источники, методы и заголовки, а затем проверить их точные производственные ответы, а не полагаться на намерение локальной конфигурации. Заблокированное чтение может сосуществовать с сервером, получившим запрос, поэтому интерфейс никогда не приравнивает сбой приложения к отсутствию контакта.
Вывод: правило, которое защищает вас, даже если оно вас раздражает — как Direct Media Downloader работает внутри него, а не вокруг него
Это правило защищает пользователей, даже если оно препятствует законной передаче файлов. Хост, который хочет, чтобы приложения браузера читали общедоступные носители, может настроить соответствующие ответы CORS; тот, который не остается недоступным по этому пути сценария.
Direct Media Downloader работает в рамках этой модели: проверяет локально, открыто запрашивает, объясняет отказ и предлагает встроенное сохранение, где это возможно. Это не превращает границу безопасности браузера в проблему обхода. Понимание этой истории превращает ошибку из произвольной враждебности браузера в видимое следствие модели запрета межсайтового чтения по умолчанию. Владельцам Origin следует тестировать точные производственные заголовки для предполагаемых методов, а не полагаться исключительно на конфигурацию информационной панели.