
Комментарии 1
Хочу добавить кое-что про L2, что часто упускают: navigator.hardwareConcurrency и deviceMemory это не просто статические числа, которые нужно подменить. Проблема в том, что эти значения коррелируют с другими сигналами. Если вы говорите "16 ядер, 32GB RAM", но при этом WebGL renderer показывает llvmpipe или Mesa, или AudioContext показывает нулевые задержки без джиттера, вся легенда рассыпается. Современные системы детекции, в частности Akamai и DataDome, строят граф корреляций. Один параметр сам по себе не срабатывает, но несовпадение двух-трёх уже достаточно.
Про deterministic noise в Canvas - хорошо, что упомянули. Именно этот момент часто ломает дешёвые stealth-решения: рандом на каждый вызов toDataURL() легко детектируется повторным рендером. Детерминизм привязанный к pid, это правильный подход.
When curl Stops Working: Multi-Level Bot Detection and Where the Cloud Browser Fits In