Доверие и границы
Маскировка CrispGuard выполняется локально — и может ли само расширение выдать то, что вы снимаете?
CrispGuard рисует маски в браузере: ключевые слова превращаются в полосу, изображения — в блок-заглушку, области — в наложение, и ничего из этого не требует сервера. Но работает это на уровне страницы, а не операционной системы, поэтому снимок, обходящий рендеринг браузера, может не содержать маску. Это не средство безопасности, и экран он не шифрует.
Что именно CrispGuard умеет закрывать, перечислено на странице продукта — три вида наложений. Эта страница уже: где происходит маскировка и что это расположение защищает, а что нет.
Путь данных в CrispGuard: что остаётся в браузере, а что его покидает
Маскировка выполняется в контент-скрипте расширения, внутри страницы, которая у вас уже открыта. Сопоставление текста, замена изображений и отрисовка наложений происходят на этапе локального рендеринга. Ни один шаг этого пути не отправляет страницу на сервер.
CrispGuard — расширение Chrome, и работу делает контент-скрипт: код, который браузер внедряет в страницу, которую вы смотрите. Он читает текст и изображения, уже присутствующие в документе, сравнивает их со списком ключевых слов, который вы настроили, и переписывает то, что браузер собирается нарисовать. Найденное ключевое слово становится сплошной полосой, цветным блоком или эмодзи. Найденное изображение становится блоком-заглушкой. Выделенная область получает наложение сверху. Страница под этим продолжает работать: ссылки ведут, формы отправляются, прокрутка не меняется.
Каждый из этих шагов — локальная операция над документом, который уже загружен: сравнение идёт со списком, хранящимся вместе с расширением, а не с моделью на сервере, и ни один этап этого пути не должен отправлять страницу куда-либо.
Но это утверждение о пути маскировки, и стоит точно сказать, чего оно не покрывает. «Локальная маскировка» и «полное отсутствие сетевых запросов» — два разных утверждения. Второе сильнее и проверяемо. Эта страница не повышает первое до второго. Согласно описанию функций в карточке магазина, решения о маскировке и отрисовка происходят на вашем устройстве. С кем расширение общается по сети — проверка лицензии, что угодно ещё — определяет его политика конфиденциальности, и именно этот документ нужно читать перед решением. Цель дизайна — удерживать как можно больше данных внутри браузера; конкретное сетевое поведение — вопрос к политике конфиденциальности, а не к маркетинговой странице.
Полезное сравнение — с продуктом, который заявляет более сильную версию. Политика конфиденциальности ContextBlur заявляет 100 % локальную обработку и отсутствие сетевых запросов, говорит, что автоматическое размытие запускается только когда пользователь нажимает «Run auto-blur now», и что хранятся только CSS-селекторы, а не содержимое страницы. Что бы вы из этого ни вынесли, оно устанавливает полезный факт: в этой категории «обрабатывается локально» — заявление, которое поставщик может опубликовать и за которое можно спросить. Это не довод, свойственный только CrispGuard, и его не стоит принимать на веру ни от одного поставщика, включая этого.
Здесь же уместна ещё одна граница. Маскировка меняет то, что страница показывает. Она не шифрует страницу, не прячет её от процессов самого браузера и не мешает тому, у кого есть доступ к вашему разблокированному компьютеру, открыть инструменты разработчика и прочитать DOM напрямую. CrispGuard — удобство для приватности в общих пространствах, а не средство безопасности, и описывать его так не следует.
Что происходит с маской при скриншоте или записи экрана — что она закрывает, а что нет
Решает только путь захвата. Если инструмент читает отрисованную страницу браузера, маска обычно входит в это изображение. Если он читает фреймбуфер операционной системы или камера фотографирует экран, расширение не может поместить маску туда.
Механизм объясняет результат. Расширение браузера живёт внутри конвейера рендеринга страницы: оно правит DOM и применённые к нему стили, а браузер рисует результат. Инструменты захвата делятся на два семейства. Одни спрашивают браузер, что он сейчас показывает, — они читают ту же отрисованную страницу, которую расширение уже изменило. Другие читают фреймбуфер операционной системы, составное изображение всего экрана, и к странице вообще не обращаются.
Мобильные платформы показывают, что умеет второе семейство, когда платформа помогает. FLAG_SECURE в Android блокирует скриншоты на уровне безопасности платформы, и операционная система просто отказывает в захвате. У расширений Chrome такого уровня нет — не существует API, которым расширение могло бы потребовать от Windows, macOS или устройства захвата отклонить кадр.
| Способ захвата | Обычно ли маска попадает в результат | Почему |
|---|---|---|
| Снимок внутри браузера (Chrome DevTools, captureVisibleTab самого расширения) | Обычно да, но зависит от момента снимка и от реализации | Захват читает отрисованную страницу, поэтому наложение может быть включено — или отсутствовать, если снимок сделан до применения маски. |
| Снимок средствами ОС (Win+Shift+S, macOS Cmd+Shift+4) | Не гарантируется | Захват происходит на уровне фреймбуфера операционной системы, тогда как расширение работает в DOM страницы, поэтому расширение не управляет тем, что захватывает ОС. |
| Сторонняя запись экрана (OBS, Loom и подобные в режиме захвата экрана) | Не гарантируется | Путь записи может обходить композитор рендеринга браузера и читать экран напрямую, из-за чего наложение не попадает в получаемые кадры. |
| Внешняя камера или телефон, снимающий экран | Не гарантируется | Камера фиксирует свет, излучаемый монитором; расширение меняет пиксели страницы, а не физический вывод панели, поэтому фотография показывает то, что панель отображает. |
| Приложение для встреч, транслирующее весь экран вместо одной вкладки | Не гарантируется | Трансляция всего экрана может захватить другие окна и системные уведомления за пределами замаскированной страницы, а расширение не достаёт за пределы браузера. |
Маскировка CrispGuard — это управление видимостью на уровне страницы, а не блокировка снимков экрана. Если вам нужно предотвратить захват на аппаратном уровне, используйте механизм защищённого отображения, который предоставляет операционная система или платформа, а не расширение браузера.
Отсюда два практических следствия. Первое: считайте, что маски нет на любом снимке, который вы не проверили. Второе: проверка дешёвая — сделайте один снимок тем инструментом, которым действительно пользуетесь, на странице, которую действительно замаскировали, и посмотрите на результат.
Как хранится PIN блокировки сайта — сигнал доверия, который можно проверить
PIN блокировки сайта хранится как хеш с солью, никогда в открытом виде. Тот, кто прочитает локальное хранилище расширения, получит значение, которое нельзя ввести в поле разблокировки. Настройки остаются обычным интерфейсом; PIN спрашивают только при разблокировке.
Блокировка сайта — функция PRO: она спрашивает PIN, прежде чем снять защиту с заблокированного сайта. Расширение хранит хеш с солью от этого PIN — PIN, пропущенный через одностороннюю функцию вместе со случайным значением, — а не сам PIN. Поэтому чтение локального хранилища не даёт готового к использованию секрета. Соль тоже важна: две установки с одинаковым PIN создают разные сохранённые значения, так что данные не выдают совпадение PIN.
Это небольшое решение стоит взвесить, потому что оно проверяемо. Продукт, хранящий PIN открытым текстом, кое-что говорит о том, как он думает о хранении; продукт, хранящий хеш, говорит, что предполагал: рано или поздно это хранилище кто-то прочитает. Ни одно из решений само по себе не делает продукт заслуживающим доверия, но в инструменте, который сидит на каждой открываемой странице, хочется видеть второе.
То, чего хеш не делает, не менее важно. Он защищает сохранённое значение, а не разблокированное состояние: если сайт уже разблокирован и кто-то стоит у вас за спиной, он читает страницу, а не хеш. Короткий цифровой PIN к тому же подбирается при достаточном числе попыток, а хеш ничего не говорит о том, сколько попыток разрешено. Хеш отвечает ровно на один вопрос — что узнает злоумышленник, прочитав этот файл — и отвечает хорошо.
Если вы решаете, доверять ли расширению для приватности экрана, что стоит проверить?
Пять проверок решают большую часть: что политика конфиденциальности говорит о передаче содержимого страниц, где маскировка действительно происходит, какие разрешения запрошены, ждёт ли автоматическое обнаружение клика и признаёт ли продукт свои ограничения.
Ни одна не требует технических знаний. Они требуют прочитать политику и список разрешений — разумный объём работы, прежде чем дать инструменту возможность читать каждую открываемую вами страницу.
- Сказано ли в политике конфиденциальности прямыми словами, что содержимое страниц, скриншоты и история просмотров не передаются? Политика, называющая эти три категории, делает опровержимое заявление; та, что говорит лишь «мы уважаем вашу приватность», — нет, а то, что нельзя опровергнуть, нельзя и проверить позже.
- Маскировка выполняется в контент-скрипте или на уровне страницы, или содержимое должно сначала попасть на сервер? Ответ определяет, «локальность» — свойство архитектуры или просто слово в описании, и только первое выдерживает отключение сети.
- Просит ли расширение разрешения, не связанные с маскировкой — буфер обмена, перехват запросов, доступ к сайтам намного шире необходимого? Каждое разрешение — это возможность, которая существует независимо от того, использует ли её текущая версия, поэтому список говорит о том, что могло бы произойти, а не только о том, что происходит.
- Автоматическое обнаружение запускается только тогда, когда вы его включаете? Функция, по умолчанию сканирующая каждую страницу, имеет иную позицию по приватности, чем та, что ждёт клика, даже если на экране обе дают одно и то же.
- Называет ли продукт свои границы — «не средство безопасности», «не останавливает скриншоты на уровне системы» — или обещает блокировку захвата? Поставщик, называющий границу, обычно думал о том, где она проходит; тот, кто обещает всё, либо ошибается, либо продаёт что-то другое.
Это не оценочная карта, и эта страница не заполнит её за CrispGuard. Если пункт нельзя подтвердить по публичной документации, считайте его неподтверждённым и читайте политику конфиденциальности. Это честная версия ответа — и единственная, которая останется верной после следующего релиза.
Частые вопросы
Отправляет ли CrispGuard содержимое моих страниц на сервер?
Путь маскировки этого не требует. Сопоставление идёт в контент-скрипте по списку ключевых слов, хранящемуся вместе с расширением, а замена рисуется в самой странице, поэтому ни один этап этого пути не загружает страницу. Делает ли расширение другие сетевые запросы — например, проверку лицензии — определяет его политика конфиденциальности, и проверять нужно именно этот документ.
Я сделал снимок системным инструментом — маска осталась?
Не гарантируется. Системный снимок читает фреймбуфер операционной системы, а расширение меняет только то, что отрисовывает браузер, поэтому наличие маски зависит от пути захвата, а не от того, включена ли она. Если захват идёт через отрисованный вывод браузера, маска обычно в него попадает.
Запишет ли программа записи экрана маску?
Зависит от режима захвата программы. Инструменты, читающие отрисованную страницу или композитор браузера, обычно включают наложение; инструменты, снимающие экран на уровне операционной системы, могут обойти его полностью. Никакая настройка CrispGuard этого не меняет, потому что ограничение в пути захвата, а не в расширении.
Если я забуду PIN блокировки сайта, расширение покажет его открытым текстом?
Нет — хранится только хеш с солью, поэтому чтение локального хранилища расширения не раскрывает PIN. Это защищает то, что сохранено, а не то, что кто-то может увидеть: если сайт уже разблокирован и кто-то смотрит на ваш экран, PIN не имеет значения.
Может ли расширение для приватности экрана заменить плёнку приватности?
Нет. Плёнка приватности сужает угол обзора физического экрана, поэтому сидящий рядом не прочитает его вообще, тогда как расширение меняет только пиксели внутри браузера. Плёнка закрывает и всё остальное на экране — другие приложения, уведомления, видеозвонок, — куда расширение браузера не достаёт. Именно об этом граница выше: управление на уровне страницы — не блокировка снимков.
Если мне действительно нужно предотвратить снимки экрана, что использовать?
Механизм платформы, а не расширение браузера. FLAG_SECURE в Android, защищённые DRM пути воспроизведения и политики управляемых устройств, отключающие захват, работают на уровне операционной системы или платформы — то есть на том уровне, через который снимок действительно проходит. В большинстве ситуаций в общем пространстве практичный ответ — плёнка приватности и повёрнутый экран.