Почему uBlock Origin лучше работает в Firefox



    Автор uBlock Origin и uMatrix Реймонд Хилл обновил памятку, почему расширение uBlock Origin наиболее эффективно работает в браузере Firefox. Некоторые технические детали относятся не только к uBO, но и к другим блокировщикам рекламы.

    Реймонд Хилл называет несколько основных факторов: более эффективное вскрытие маскировки CNAME, HTML-фильтрация, поддержка WebAssembly, более корректная процедура запуска браузера, сжатие LZ4 и надёжно отключённый префетчинг ресурсов. Всё это есть в Firefox, но отсутствует или глючит в браузерах на основе Chromium.

    Вскрытие CNAME


    Вскрытие CNAME (CNAME uncloaking) — это возможность распознавать сторонние серверы, которые маскируются под родной домен. Проверка выполняется путём проверки записи CNAME (Canonical Name).

    Каноническое имя — это тип записи DNS, которая привязывает псевдоним к действительному (каноническому) доменному имени. Запись CNAME хранится в настройках DNS домена в виде пары значений.

    Записи CNAME обычно используются для привязки поддомена к домену, на котором размещён контент этого поддомена. Но злоумышленники могут использовать эту техническую возможность для обхода блокировки, когда автоматически блокируются все ресурсы, загружаемые со сторонних доменов. То есть для обмана блокировщиков рекламы. Это очень распространённая практика.



    Естественно, блокировщики рекламы стараются распознать мошенников, проверяя запись CNAME для каждого домена. Независимое тестирование показывает, что связка uBlock Origin и Firefox эффективнее всего справляется с этой операцией, по сравнению с другими связками блокировщик+браузер.


    Тёмно-зелёным и красным отмечен uBO до и после того, как получил возможность вскрывать записи CNAME в Firefox. Источник: «Описание трекинга на основе маскировки CNAME» на сайте Азиатско-Тихоокеанского сетевого информационного центра, август 2020

    HTML-фильтрация


    HTML-фильтрация — возможность фильтровать тело ответа HTML до того, как оно проанализировано браузером.

    Например, это позволяет удалить определённые теги в HTML-документах. В других браузерах отсутствует механизм надёжно провести такую процедуру. Дело в том, что для этой функции требуется программный интерфейс WebRequest.filterResponseData(), который в настоящее время доступен только в Firefox.

    Запуск браузера


    При запуске Firefox ждёт готовности, пока uBO будет полностью готов к работе, прежде чем запускать сетевые запросы в уже открытых вкладках. Это не относится к браузерам на основе Chromium. В них вредоносные трекеры и реклама могут попасть в уже открытые вкладки, в то время как они правильно отфильтруются в Firefox. Надёжная блокировка при запуске браузера особенно важна для тех, кто по умолчанию использует режим блокировки сторонних ресурсов и/или JavaScript.

    Префетчинг


    Префетчинг по умолчанию отключён в uBO, а также надёжно отключён в Firefox, в то время как в браузерах на базе Chromium это не так. Браузеры на базе Chromium дают веб-сайтам приоритет над пользовательскими настройками для префетчинга. Подробнее см. документацию uBlock Origin и обсуждение в баг-трекере Chromium.

    WebAssembly


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

    Более подробно см. обсуждение в репозитории WebAssembly.

    Сжатие данных


    Firefox-версия uBO использует сжатие LZ4 для хранения исходных списков фильтров, скомпилированных списков и снапшотов памяти на диске.

    Сжатие LZ4 требует наличия IndexedDB, что проблематично с браузерами на базе Chromium в режиме инкогнито — там инстансы IndexedDB всегда сбрасываются, в результате чего uBO всегда запускается неэффективно и с устаревшими списками фильтров. Инстанс IndexedDB необходим, поскольку он поддерживает хранение данных в блобах, что недоступно в browser.storage.local API.

    Это основные причины, почему uBlock Origin лучше работает в Firefox, чем в браузерах на основе Chromium.



    На правах рекламы


    Серверы с возможностью установить браузер или любых других задач на базе новейших процессоров AMD EPYC. Создавайте собственную конфигурацию виртуального сервера в пару кликов на любой операционной системе!

    VDSina.ru
    Серверы в Москве и Амстердаме

    Комментарии 20

      –9

      Иными словами, в фаирфоксе этот плагин может внутри webassembly сделать что угодно на каком угодно этапе с чем ему угодно? (В том числе за счёт ошибки (слишком тяжелая регулярная строка например) убить всю производительность браузера)?

        +13

        Это всё прекрасно могут плагины и без webassembly.

          0
          Некоторое время назад нашёл проблему в официальном плагине Selenium IDE для Chrome: если открыта стартовая страница — это расширение загружает одно ядро процессора на 100%. Уж не знаю, используют они WebAssembly или нет, но косямбы реальны.
          А в Firefox такой проблемы не обнаружилось.
            –4

            Безусловно, но проанализировать код пусть и на обфусцированном, но всё же JS проще чем разобраться в коде веб ассемблера.

              +2

              uBlock Origin — open source, там можно посмотреть откуда что берётся и без обфускации.

                –2

                Стандартный вопрос: где гарантия что то, что оказалось в магазине приложений собрано именно из того же кода, что лежит на гитхабе?


                P.s. С собственной сборкой то понятно

                  +3

                  Судя по https://github.com/gorhill/uBlock/blob/master/.github/workflows/main.yml, там сборка скриптом в контейнере, так что должно воспроизвестись, разницы в окружении сборки не будет. Если не воспроизведётся — писать issue.

                    –1

                    Хорошо.


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


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

                0
                Вы слишком хорошего мнения о js. Обфусцированый код будет представлять из себя кашу, прочитать которую не получиться даже с помощью специальных скриптов, как минимум из-за возможности неявного вызова eval.
            –4
            Буквально недавно продался злой корпорации Гугл так как по работе продуктивнее Хром вместе с сервисами Гугл. А ведь пользовался firefox с 2005г. Жаль конечно что компания опускается всё ниже и ниже, увольняют сотрудников, директора смещают только потому что не поддержал права геев, поставить по современным меркам бабу лезбу которая подняла себе зарплату в 2 раза, ну что же: Результат на лицо.
              0
              Приезжай к нам в РБ, тут нехватает ИТшников.
              +3
              Столько текста и ни слова про Manifest V3.
                0

                Блин, одни переводы, хабр уже не торт совсем…
                Половина того, что я читаю на HackerNews через неделю появляется тут.

                  +4

                  Проблема не в переводах, они тоже нужны.
                  Проблема в том, что другого хорошего контента мало.

                  0
                  Нет. Основная проблема: ключевое API для Ublock (WebRequest) в Chrome не имеет асинхронного режима. Баг в Chrome: bugs.chromium.org/p/chromium/issues/detail?id=625860#c17
                    0

                    Странно, что еще не закрыли с "Won't fixed", потому что новое асинхронное API как раз было остовной причиной критики Manifest V3

                      0
                      Закрыли. Как бы… И нет, это не было причиной критики Manifest V3.
                        0

                        Хм, точно, нужно привыкнуть к багтрекеру хромиума, прочитал только название

                    0
                    При запуске Firefox ждёт готовности, пока uBO будет полностью готов к работе, прежде чем запускать сетевые запросы в уже открытых вкладках

                    Не знаю даже что и сказать… Много раз встречал противоположную ситуацию.
                    На очень старом компьютере с 1 Гб памяти это заметно. Также заметно на андроидах, тоже на старых. Открываешь страницу — реклама. Подождал, обновил — исчезла.

                    Может на последних версиях иначе стало.
                      0

                      Никогда такого не видел, даже на старых телефонах, только на хроме такое есть

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

                    Самое читаемое