Согласование таймеров с ограничениями изоляции перекрестного происхождения

До версии 91 разрешение таймера в Chrome было ограничено 5 микросекундами на настольных компьютерах, где включена изоляция сайтов , и 100 микросекундами на Android, где она отключена.

Начиная с версии 91, после изменения спецификации , Chrome будет ограничивать разрешение явных таймеров ( performance.now() , performance.timeOrigin и других API производительности, которые предоставляют DOMHighResTimestamps ) до 100 микросекунд на всех платформах. Включив кросс-оригинальную изоляцию , веб-сайты могут ослабить ограничение до 5 микросекунд независимо от платформы.

Получение более мощных возможностей путем включения изоляции между источниками — это аналогичный подход, предложенный в SharedArrayBuffer . Изоляция между источниками — это состояние, в котором веб-страница изолирована от других источников, за исключением тех, которые согласились.

Нужно ли мне что-то с этим делать?

Вероятно, нет. performance.now() был ограничен значительно более грубыми разрешениями в других браузерах (например, 1 миллисекунда = 0,001 секунды), так что вам в любом случае не следовало полагаться на текущее разрешение.

В то же время, если вы хотите получить выгоду от более высокого разрешения для ваших таймеров, например, для более точных измерений производительности, вам нужно убедиться, что ваш сайт является кросс-доменным изолированным . Это обеспечит вам лучшее разрешение как в Chrome, так и в других браузерах на базе Chromium, а также в Firefox .

Какое отношение таймеры имеют к изоляции между источниками?

Поставщики браузеров решили ограничить таймеры более грубыми разрешениями (а также доступностью SharedArrayBuffers, которые могут использоваться как неявные таймеры), когда был обнаружен Spectre . Это связано с тем, что Spectre и подобные атаки спекулятивного выполнения полагаются на таймеры для измерения времени, необходимого для определенных операций, а затем угадывают содержимое памяти процесса.

Хотя атаки спекулятивного выполнения могут быть выполнены с грубыми таймерами, таймеры высокого разрешения могут ускорить их. Chrome использовал свою архитектуру изоляции сайтов , а также другие механизмы , чтобы снизить риск и снова включить эти функции, но это ограничено только настольными платформами и браузерами Chromium. Наличие API, полагающихся на базовую архитектуру браузера, на самом деле не идеально.

Изоляция от кросс-источника обеспечивает стандартную базу для браузеров, чтобы запускать страницы в изолированной среде, так что они не могут загружать нежелательные ресурсы кросс-источника, и, следовательно, не подвержены риску Spectre. Благодаря изоляции от кросс-источника мы теперь можем разрешить страницам получать доступ к таймерам высокого разрешения, SharedArrayBuffer и другим API, которые небезопасно раскрывать в процессах, которые могут считывать произвольные данные кросс-источника.

Чтобы узнать больше о причинах этого изменения, прочтите статью Почему для эффективных функций необходима «междоменная изоляция» .

Фотография на обложке сделана Линдой Перес Йоханнессен на Unsplash .