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

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

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

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

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

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

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

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

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

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

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

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

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