Перейти к содержимому

Сравнение

Страница, расширение или движок

Всякий способ изменить то, что читает сайт, работает на своей глубине. Глубина решает, что стоит на месте до появления первого ответа, что видит второй мир и чего стоит исправить одно неверное значение.

Три глубины одной правки

Значение, которое читает сайт, правят в трёх местах. В странице поверх готового ответа, в расширении, которое приходит к странице раньше, или в движке, который этот ответ и выдаёт.

Это не три степени одного и того же. Они отличаются тем, со сколькими вещами правке придётся сойтись.

  • В странице

    Свойство подменяется после того, как браузер уже приготовил свой ответ.

  • В расширении

    Та же подмена, доставленная до того, как страница исполнит свой первый скрипт.

  • В движке

    Значение таким и выдаётся, поэтому подменять уже нечего.

Что приходит поверх готового ответа

Скрипт, положенный в собственный мир страницы на её начале, это самое раннее, чем может быть страничный слой, и он правда успевает раньше первого вопроса.

И всё равно это поправка поверх значения, которое браузер уже выдал. Подлинник никуда не девается: он остаётся доступен всюду, куда поправка не дотянулась.

Что отвечает второй мир

Странице необязательно спрашивать документ. Она может открыть фоновый поток или невидимый кадр и прочитать устройство там.

Страничный слой закрывает только те миры, в которые его поставили. Замерено на таком слое: документ отвечал профилем, а фоновый поток отвечал машиной под ним.

  • Документ

    Мир, который читает любая простая проверка, и первое, что закрывает страничный слой.

  • Невидимый кадр

    Дочерний мир со своей копией тех же объектов.

  • Фоновый поток

    Мир без документа, куда поправка, написанная для документа, не достаёт.

Восемь способов по своей глубине

Таблица читается как границы работы, а не как оценка. Пустая клетка значит, что вопрос к этому способу не относится.

Последняя строка наша. Каждая клетка в ней взята из кода, который можно открыть, или из приёмки собранного движка.

Где идёт правкаКогда она успеваетЧто читает поток или кадрЧего стоит ошибка
Обычный браузер как естьПравки нетТо же, что и документОшибаться нечем
Режим инкогнитоВ хранилище, а не в устройствеКогда открывается окноСобственные ответы машиныОшибаться нечем
Отдельные профили того же браузераВ каталоге данных на дискеПри запускеСобственные ответы машиныОшибаться нечем
Расширение, подменяющее значения в страницеВ странице, поверх настоящего ответаДо первого скрипта самой страницыКуда слой дотянулся, а в остальном машинуПерезапуск на починку и подменённое свойство на виду
VPNНа дороге, вне браузераДо первого ушедшего запросаПоказания устройства не тронутыПереподключиться через другой выход
Виртуальная машина на аккаунтВ гостевой системе, ниже браузераДо запуска браузераОтветы гостя, во всех мирахПересобрать образ и загрузиться заново
Отдельное железо на аккаунтНигде: отвечает сама машинаОтветы машины, во всех мирахОшибаться нечем
Браузер с правкой самого движкаВнутри движка, на C++До того, как появится первый ответТо же, что и документПересборка на часы, а объявленное и не собранное показание отдаст хозяйское значение

Чем оплачен ответ изнутри

Глубина оплачивается временем сборки. Правка внутри движка это сборка браузера под каждую систему, то есть часы, а не перезапуск.

Оплачивается она и учётом. Сборка записывает, какие показания она и правда несёт, разыскивая каждое в том дереве исходников, которое только что собрала.

  • Список замеряется, а не переписывается

    Каждое показание доказано признаком, найденным в дереве в минуту сборки.

  • Молчание значит, что не закрыто ничего

    Сборка, не объявившая ничего, читается как ничего не закрывающая, и страница закрывает всё.

  • Страница отходит по одному показанию

    Что сборка объявила, то страница больше не поправляет, и две поправки не встречаются.

Где выигрывает мелкий слой

Глубина нужна не всегда. Чтобы перекрыть запрос, страница и не нужна: правило внутри сетевого слоя срезает его, и странице при этом не видно ничего.

Браузер, который у вас уже есть, это настоящее преимущество, когда аккаунт один. Глубокий слой окупается там, где многим аккаунтам надо оставаться врозь на одной машине.

Чего это сравнение не утверждает

  • Не утверждает, что глубина решает исход. Аккаунт читают ещё по поведению и по истории, и их не трогает ни один слой.
  • Не описывает ни одного названного изделия. Здесь сравниваются способы работы, а мерить чужую сборку мы не берёмся.
  • Не каждое показание отвечает сегодня изнутри движка. Чего сборка не объявила, то по-прежнему поправляется из страницы, и такая поправка оставляет подменённое свойство, а движок не оставляет ничего.
  • Не изолирует так глубоко, как гостевая система. Профили это процессы на вашем собственном ядре, и это ядро они делят друг с другом и с вами.
  • Замеры сняты на нашей сборке и одной машине. Другая машина даст другие строки.

Как это проверить

За каждым утверждением выше стоит файл, а за большинством ещё и стенд, который исполняет код, а не пересказывает его.

Список того, что закрывает сборка, читается рядом с двоичным файлом, а его отсутствие читается как пустота
apps/desktop/src/lib/forkEngine.js
Один файл решает, что ещё закрывает страница, и стенд исполняет это решение
apps/desktop/src/lib/дыры-страницы.js · apps/desktop/test/страница-отходит-когда-движок-умеет.js
Каждое показание, объявленное сборкой, доказано признаком в дереве исходников
engine/scripts/опись-умений.js · packages/shared/src/index.js · apps/desktop/test/engine-patches-real.js
Документ, кадр и поток читаются порознь и сверяются между собой
apps/desktop/src/lib/fpAudit.js · apps/desktop/test/fingerprint-realms.js · engine/приёмка-отчёт.json

Вопросы

Расширение приходит раньше первого скрипта страницы. Почему этого мало?
Потому что ответ, который оно правит, уже есть. Всюду, куда поправка не дотянулась, подлинник остался на месте, и два ответа на один вопрос говорят больше, чем один странный ответ.
Почему не перенести все показания в движок разом?
Сборка занимает часы на каждую систему, поэтому показания приходят порциями. Чего в нынешней сборке нет, то до её выхода закрывается из страницы.
Откуда программа знает, что закрывает сборка?
Она читает короткий список, который сборка кладёт рядом с двоичным файлом. Пропавший или порченый список читается как пустой, и это безопасная сторона ошибки.
Могут ли две поправки лечь на одно показание?
Нет. Один файл решает, что страница ещё закрывает, и показание, объявленное сборкой, из этого списка уходит.
Видно ли подменённое свойство?
Страничный слой прячет себя, и подменённая функция по-прежнему читается как встроенная, а самопроверка на этом настаивает. Значению, выданному внутри движка, прятать нечего.

Узнайте, на каком слое ваш браузер

Проверка снимает 12 показаний в вашем браузере и никуда их не отправляет.