Week 23. 01.06.2025 - 07.06.2025
Vitali Haradkou
💻 Основная деятельность
- Делали поддержку задачи маркет паттерна. Поскольку не удобно в тестах описывать все маркеты. Т.к. количество передаваемых маркетов могло быть 50 и даже 100
🌐 Новости\События
Выпуск web-браузера Chrome 137 [1]
Компания Google опубликовала релиз web-браузера Chrome 137. Одновременно доступен стабильный выпуск свободного проекта Chromium, выступающего основой Chrome. Браузер Chrome отличается от Chromium использованием логотипов Google, наличием системы отправки уведомлений в случае краха, модулями для воспроизведения защищённого от копирования видеоконтента (DRM), системой автоматической установки обновлений, постоянным включением Sandbox-изоляции, поставкой ключей к Google API и передачей RLZ-параметров при поиске. Для тех, кому необходимо больше времени на обновление, отдельно поддерживается ветка Extended Stable, сопровождаемая 8 недель. Следующий выпуск Chrome 138 запланирован на 24 июня.
Основные изменения в Chrome 137:
- В сборки для Windows и macOS интегрирован чат-бот Gemini, который может пояснять содержимое просматриваемой страницы и отвечать на связанные со страницей вопросы, не переключаясь с текущей вкладки. Поддерживается текстовое и голосовое взаимодействие с Gemini. Работа с чат-ботом пока доступна только части пользователей из США, имеющих подписки Google AI Pro и Ultra.
- По аналогии с ранее реализованным сегментированием хранилища, обеспечена изоляция обработки URL-схемы "[blob:](https://en.wikipedia.org/wiki/Blob_URI_scheme)", предназначенной для доступа к локально сгенерированным данным через API Blob или File. При сегментировании к ключу, применяемому для извлечения объектов, прикрепляется отдельный признак, определяющий привязку к первичному домену, с которого открыта основная страница, что позволяет блокировать методы отслеживания перемещений пользователя между сайтами через манипуляцию с URL "blob:".
- В режиме расширенной защиты браузера (Safe Browsing > Enhanced protection) активирована возможность использования большой языковой модели для определения мошеннических страниц по их содержимому. AI-модель выполняется на стороне клиента, но в случае выявления подозрений на сомнительный контент, выполняется дополнительная проверка на серверах Google. В текущей версии пока производится только сбор информации о проблемных страницах. В следующем выпуске планируется начать выводить предупреждения пользователю.
- Включена защита от скрытой идентификации пользователей при помощи кэша HSTS (HTTP Strict Transport Security). HSTS позволяет сайтам при входе по HTTP перенаправить пользователя на HTTPS. В процессе работы имя хоста, выставленного через HSTS, сохраняется во внутреннем кэше, что позволяет использовать факт присутствия или отсутствия хоста в кэше для хранения одного бита информации. Для скрытого хранения 32-разрядного идентификатора пользователя можно использовать массив из 32 изображений, отдаваемых с разных хостов по HTTP (http://bit0.example.com/image.jpg, http://bit1.example.com/image.jpg и т.п.). Определение идентификатора производится путём проверки с каких хостов изображения загрузились по HTTPS, а с каких по HTTP (если изображения были отданы ранее по HTTP и через HSTS перенаправлены на HTTPS, то при последующих запросах они сразу будут загружены с HTTPS, минуя обращение по HTTP). Защита сводится к разрешению обновления HSTS только для ресурсов верхнего уровня и блокировке обновления HSTS в запросах субресурсов.
- Для соединений WebRTC реализована поддержка протокола DTLS 1.3 (Datagram Transport Layer Security, аналог TLS для UDP). Поддержка DTLS 1.3 необходима для использования алгоритмов постквантового шифрования в WebRTC.
- Удалена опция командной строки "--load-extension", позволяющая загружать дополнения. Опция убрана с целью снижения риска её использования для подстановки вредоносных дополнений. Для принудительной загрузки распакованных дополнений рекомендуется использовать кнопку Load Unpacked на странице управления дополнениями (chrome://extensions/) после включения режима для разработчика. В Chromium и тестовых сборках Chrome For Testing поддержка опции "--load-extension" сохранена.
- Решено отказаться от автоматического отката на использование для WebGL системы программной отрисовки SwiftShader, реализующей API Vulkan. В случае отсутствия должного бэкенда на базе GPU создание контекста WebGL теперь будет возвращать ошибку, а не переключаться на SwiftShader. Прекращение использования SwiftShader позволит повысить безопасность, благодаря исключению выполнения сгенерированного JIT-компилятором кода в процессе, отвечающем за взаимодействие с GPU. Для возвращения использования SwiftShader предусмотрена отдельная опция командной строки "--enable-unsafe-swiftshader". В версии Chrome 137 для пользователей платформ Linux и macOS при использовании SwiftShader в web-консоль будет выводиться предупреждение, а в Chrome 138 откат на Swiftshader будет отключён. Для пользователей Windows система SwiftShader заменена на встроенную в Windows систему программной отрисовки WARP (Windows Advanced Rasterization Platform).
- В настройки добавлена возможность включения функции "Autofill with AI", упрощающей заполнение web-форм. При включении браузер задействует AI-модель для понимания web-формы и автоматического заполнения полей, отталкиваясь от того, как ранее пользователь заполнял похожие формы.
- Реализовано CSS-свойство "reading-flow", позволяющее управлять порядком обработки элементов во flex, grid и блочных контейнерах при использовании экранных ридеров и при последовательной навигации. Также добавлено свойство "reading-order", дающее возможность вручную переопределять порядок элементов.
- В CSS предложена функция "[if()](https://drafts.csswg.org/css-values-5/#if-notation)", предназначенная для выбора значений в зависимости от результата выполнения условных выражений. В качестве аргумента передаётся разделённый точкой с запятой список пар "условие:значение". Функция перебирает эти пары и останавливается при первом сработавшем условии. Например: "background-color: if(style(--color: white): black; else: white);".
- В CSS-свойстве offset-path реализована функция shape() для формирования фигур при помощи команд, эквивалентных функции path(), но позволяющих использовать для них стандартный синтаксис CSS.
- Добавлен API JSPI (JavaScript Promise Integration), обеспечивающий интеграцию WebAssembly-приложений с JavaScript-объектом Promise и позволяющий WebAssembly-программам выступать в роли генератора Promise и взаимодействовать с API на базе Promise.
- В инструменты для web-разработчиков добавлена возможность привязки к рабочим пространствам, позволяющая сохранять в локальных файлах изменения, добавленные в JavaScript, HTML и CSS при работе со встроенными в браузер инструментами. Расширены возможности AI-ассистента, который может изменять CSS и анализировать производительность.
Кроме нововведений и исправления ошибок в новой версии устранены 11 уязвимостей. Многие из уязвимостей выявлены в результате автоматизированного тестирования инструментами AddressSanitizer, MemorySanitizer, Control Flow Integrity, LibFuzzer и AFL. Критических проблем, которые позволяют обойти все уровни защиты браузера и выполнить код в системе за пределами sandbox-окружения, не выявлено. В рамках программы по выплате денежного вознаграждения за обнаружение уязвимостей для текущего релиза компания Google выплатила 8 премии на сумму 7500 долларов США (по одной премии в $4000, $2000, $1000 и $500). Размер четырёх вознаграждений пока не определён.
Facebook и Yandex использовали свои Android-приложения для деанонимизации сеансов в браузерах [2]
Компании Meta* и Yandex уличили в скрытом отслеживании пользователей и манипуляциях для обхода предоставляемых браузерами средств обеспечения конфиденциальности, таких как режим инкогнито и возможность очистки Cookie. Активность по деанонимизации сеансов применялась на платформе Android при открытии сайтов, использующих системы web-аналитики Яндекс Метрика или Facebook Pixel.
Суть использованного метода идентификации сводится к тому, что распространяемые Meta и Yandex мобильные приложения для Android, такие как Facebook, Instagram, Yandex Maps, Yandex Navigator, Yandex Search, Yandex Go: Taxi Food и Yandex Browser, создавали дополнительный канал связи с выполняемым в браузере JavaScript-кодом. Мобильные приложения запускали отдельные обработчики соединений на локальном сетевом интерфейсе (127.0.0.1), принимающие запросы по протоколам HTTP, HTTPS, WebSocket и WebRTC.
При открытии в браузере сайтов, использующие системы web-аналитики Yandex Metric или Facebook Pixel, связанный с данными системами JavaScript-код отправлял запросы на открытые мобильными приложениями сетевые порты. В запросах передавались метаданные, Cookie и управляющие команды. В мобильных приложениях браузерные сеансы связывались с реальными идентификаторами пользователя и устройства, к которым имели доступ приложения. Например, сеансы могли связываться с учётными записями в Facebook и Yandex или с идентификаторами AAID (Android Advertising ID). Таким образом, даже при открытии сайта в режиме инкогнито или после удаления Cookie, сервисы Meta и Yandex могли точно идентифицировать пользователя, открывшего сайт, привязываясь к идентификаторам из мобильных приложений, запущенных на том же устройстве.

Реализованная техника представляла опасность не только из-за утечки информации в Facebook и Yandex, но и из-за возможности использования вредоносными приложениями. Сетевые порты, на которые отправлялись сведения об активности в браузере, могли использовать любые приложения для отслеживания активности пользователя и построения истории посещений, а не только приложения Facebook и Yandex.
Компании Facebook и Yandex воспользовались тем, что платформа Android не ограничивает создание слушающих сокетов в привязке к интерфейсу loopback (127.0.0.1), если приложение имеет полномочия INTERNET. В случае Facebook локальному приложению передавалось содержимое Cookie "[_fbp](https://web.archive.org/web/20250602140111/https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc/)" (уникальный идентификатор пользователя в Facebook Pixel). Через манипуляции с WebRTC содержимое подставлялось в поле "ice-ufrag" пакетов SDP, отправляемых в STUN-запросах на локальный хост. 17 мая в Chrome была заблокирована подобная возможность и скрипты Facebook Pixel перевели на использование WebRTC TURN. После раскрытия результатов исследования компания Meta удалила из скриптов Facebook Pixel отправку запросов на localhost.

В Яндекс метод отправки данных из браузера в мобильные приложения применялся с 2017 года. JavaScript-код сервиса Yandex Metrica устанавливал HTTP- или HTTPS-соединение с localhost по сетевым портам 29009, 29010, 30102 и 30103. Обращения отправлялись на сайт yandexmetrica.com, доменное имя которого резолвилось в IP-адрес 127.0.0.1. Информация о сетевых портах, на которых мобильные приложения Yandex должны были открыть слушающие сокеты, подгружалась динамически через запрос к хосту startup.mobile.yandex.net.
Сервер также передавал параметр first_delay_seconds, содержащий задержку перед запуском сетевых сервисов (приложения начинали принимать соединения не сразу после установки, а примерно через три дня). В ответ на HTTP-запрос мобильное приложение возвращало набор данных, включающий идентификаторы в сервисах Yandex, системные UUID и AAID (Android Advertising ID). JavaScript код Yandex Metric переправлял полученные идентификаторы на сервер mc.yango.com.

Упомянутые методы передачи данных работали в версиях Chrome и Edge для Android. В Firefox работал только метод Yandex. В DuckDuckGo и Brave отправка запросов к localhost блокировалась или требовала ручного подтверждения операции. В представленном в конце мая выпуске Chrome 137 была добавлена защита от подстановки данных в SDP.
Для защиты от рассмотренных злоупотреблений развивается спецификация PNA (Private Network Access), дающая возможность ограничить обращение к хостам во внутренней сети (127.0.0.0/8, 192.168.0.0/16, 10.0.0.0/8 и т.п.). Пробное внедрение данной спецификации в Chrome оказалось неудачным из-за возникновения проблем с совместимостью с некоторыми устройствами. В настоящее время развивается второй вариант спецификации - LNA (Local Network Access), для поддержки которой не требуется изменение на стороне устройств и достаточно изменений на стороне сайтов, которым нужен доступ к интранет-ресурсам.
«Блокнот» для Windows 11 получил поддержку Markdown [3]

Microsoft обновила приложение «Блокнот» для Windows 11, добавив поддержку Markdown-разметки. Однако некоторые пользователи Windows 11 оказались недовольны нововведением.Благодаря поддержке Markdown можно выделять текст жирным шрифтом, курсивом или использовать маркеры (в том числе пронумерованные).
Однако некоторые пользователи считают, что это противоречит изначальной простоте «Блокнота». «Это не нужно, у нас уже есть WordPad для этого. Notepad когда-то был отказоустойчивым при случайном перезапуске, но теперь многое испортили», — написал один из них в соцсети X.
«Notepad — это не приложение для заметок (OneNote уже есть), это текстовый редактор. Не используйте его для отображения форматирования markdown. Вы раздуваете основные компоненты, которые должны быть минималистичными и стабильными. Нам не нужны markdown, интегрированный Copilot и тому подобное», — добавил другой.Разметка Markdown появилась вверху на панели инструментов. Она позволяет применять параметры форматирования, такие как заголовок, полужирный шрифт и курсив. Рядом находится кнопка, которая превращает строки в списки, а также можно вставлять URL-адреса непосредственно между текстом. Наконец, появилась кнопка «Отменить форматирование».Функция включена по умолчанию, но пользователи могут отключить форматирование в настройках.
В Microsoft заявили об облегчённой реализации разметки, которая не замедлит работу текстового редактора или не будет требовать больше ресурсов. Весной компания внедрила в сервис функции ИИ, в том числе реферирования текста. Инструмент «Реферирование» (Summarize) позволяет генерировать рефераты из выбранных отрывков текста. Чтобы воспользоваться им, нужно выделить текст, кликнуть правой кнопкой мыши и выбрать новую опцию в меню Copilot или через сочетание клавиш Ctrl + M.
Ранее WordPad выступал в роли срединного инструмента между «Блокнотом» и MS Word. Однако редактор удалили с выходом Windows 11 24H2. В сети появилась инструкция, как восстановить программу, используя обходной путь.
За 10 месяцев в Chrome удалось на 22% повысить производительность в тесте Speedometer 3 [4]
Компания Google подвела итог оптимизаций в Chrome, внесённых с августа прошлого года. Изменения позволили ускорить прохождение теста Speedometer 3 на 22% (было 42.84, а стало 52.35 балла) и добиться наилучших результатов среди всех браузеров. Упомянуто, что полученный прирост производительности в совокупности позволит на 58 миллионов часов сократить ожидания загрузки сайтов у всех пользователей браузера, если каждый пользователь использует Chrome всего 10 минут в день. Примечательно, что c апреля 2022 года по август 2024 года производительность прохождения теста Speedometer 3 в Chrome выросла на 94% (Chrome 101 набирал примерно 22 балла, Chrome 128 - 42.84 балла).

Среди изменений, способствовавших повышению производительности браузера, упомянуты:
- Оптимизация размещения в памяти внутренних структур, связанных с DOM, CSS, DOM, компоновкой страницы и отрисовкой;
- Сохранение только необходимых состояний в движке Blink;
- Повышение эффективности использования кэша CPU;
- Оптимизация работы сборщика мусора Oilpan;
- Улучшение работы со строками и переход на алгоритм хэширования rapidhash в процессе отрисовки;
- Задействование оптимальных алгоритмов хэширования, фильтрации и проверки в различных структурах данных;
- Ускорение операции компоновки глифов (shaping) при выводе текста.
Тестовый набор Speedometer 3.0 подготовлен совместно компаниями Mozilla, Google, Microsoft и Apple и нацелен на оценку задержек при симуляции работы пользователя с типовыми web-приложениями. В тестах оценивается производительность работы фреймворков Angular, Backbone, jQuery, Lit, Preact, React, React+Redux, Svelte и Vue, отрисовки при помощи элемента Canvas, генерации SVG, обработки сложных CSS, работы с очень большими деревьями DOM и использования методов, применяемых при редактировании контента в режиме WYSIWYG и при работе с новостными сайтами. При тестировании измеряется скорость работы с заметками в разных реализациях фреймворка TodoMVC, проверяется обработка текста в WYSIWYG-редакторах CodeMirror и TipTap, выполняются операции с диаграммами при помощи библиотек Observable Plot, chart.js и react-stockcharts, симулируется взаимодействие с контентом на сайтах, использующих web-фреймворки Next.js и Nuxt.
🔎 Находки (статьи, репозитории, лонгриды, новости одной строкой)
- Artificial Blood That Could Work for All Blood Types in Trials [5]
- Как перестать беспокоиться и начать внедрять интеграционные тесты [6]
🥷🏻 Личное
- Сходил на картинг
🧓🏻 Ретроспектива
- 7 июня 1965 — Sister Mary Kenneth Keller стала первой в США женщиной, получившей учёную степень PhD по компьютерным наукам (университет Дюбьюка, штат Айова)
🔗 Источники
- https://opennet.ru/63315-chrome
- https://opennet.ru/63350-privacy
- https://habr.com/ru/news/914796/
- https://opennet.ru/63363-chrome
- https://www.newsweek.com/artificial-blood-japan-all-blood-types-2079654
- https://habr.com/en/companies/vktech/articles/914906/