PowerScan
RU

Строки рендерера WebGL и аппаратные сигналы: сколько о вас говорит ваш GPU

Отпечатки браузера · 6 мин чтения · Автор: PowerScan

Фото: Unsplash

Оборудование, на котором работает браузер, просачивается на страницу несколькими мелкими способами. Ни один из них не называет компьютер, но вместе они описывают его достаточно точно, чтобы отличить от большинства других.

Строка рендерера

WebGL предоставляет расширение WEBGL_debug_renderer_info с двумя значениями: немаскированным производителем и немаскированным рендерером. В Windows с Chromium рендерер обычно выглядит примерно так: ANGLE (NVIDIA, NVIDIA GeForce RTX 2060 SUPER (0x00001F06) Direct3D11 vs_5_0 ps_5_0, D3D11). Эта одна строка называет производителя GPU, точную модель, её идентификатор устройства PCI, графический API и модель шейдеров, что также сильно намекает на операционную систему, потому что такая строка существует только в Windows.

Firefox и Safari в разное время маскировали или обобщали эту строку; Chromium её раскрывает. Браузер, который её маскирует, возвращает обобщённое значение, и диагностика показывает «информация о рендерере скрыта», а не гадает.

Количества и размеры

navigator.hardwareConcurrency возвращает число логических потоков процессора. navigator.deviceMemory возвращает приблизительный объём ОЗУ, округлённый до небольшого набора значений и ограниченный в Chromium числом 8, так что компьютер с 32 ГБ сообщает 8. screen.width и screen.height дают размер дисплея, availWidth и availHeight вычитают панель задач, а devicePixelRatio выдаёт масштабирование. screen.colorDepth почти всегда равен 24. navigator.maxTouchPoints отделяет устройства с сенсорным вводом от остальных.

Некоторые из них обладают необычно высокой идентифицирующей силой для того, как безобидно выглядят. У числа потоков лишь несколько распространённых значений, но это одно из полей, которым известный коммерческий сервис фингерпринтинга придаёт большой вес именно потому, что оно дёшево и стабильно. Размер экрана в сочетании с соотношением пикселей и доступной высотой сужает круг до конкретной машины сильнее, чем user agent.

Медиаустройства

navigator.mediaDevices.enumerateDevices() возвращает камеры, микрофоны и динамики системы. Без разрешения современные браузеры возвращают типы и количества, но пустые названия, так что страница узнаёт «одна камера, один микрофон, один выход» и ничего больше. Выдача доступа любому сайту раскрывает названия. Диагностика, показывающая только количества, ведёт себя так, как вела бы себя страница без разрешения.

Снова о согласованности

Аппаратные сигналы — место, где подмена ошибается чаще всего. Профиль, заявляющий MacBook с рендерером NVIDIA Direct3D, 24 потоками и экраном 1366×768, описывает несуществующий компьютер. Сайтам не нужна для этого база данных; это ловят несколько правил. Если профиль меняет любое из этих значений, он должен изменить все до сочетания, с которым реальное устройство действительно выпускается, и сохранять его от визита к визиту.

Что проверить

Прочитайте строку рендерера и спросите, соответствует ли она операционной системе в user agent. Прочитайте размер экрана и спросите, соответствует ли он соотношению пикселей и доступной высоте. Прочитайте число потоков и память и спросите, правдоподобна ли эта пара для данного GPU. Диагностика располагает всё это рядом как раз для этой цели; суждение за вами.

Все статьи · Запустить проверку