Invisible Texts

Текстовый инструмент

Детектор скрытых символов

Вставьте текст — детектор подсветит каждый найденный невидимый символ Unicode: пробелы нулевой ширины, соединители, направляющие метки и мягкие переносы, каждый с пометкой кода.

Проверка символов
Проверить невидимые символы
Вставьте текст, чтобы найти скрытые Unicode-символы и удалить их при необходимости.
Найденные символыВсего: 0

Известные невидимые символы не найдены.

Почему невидимые символы — настоящая проблема

Невидимые символы Unicode существуют по уважительным причинам — управление переносами, соединение в курсивных письменностях, двунаправленный текст, опциональная расстановка переносов. Но поскольку они не отрисовываются, они же служат инструментом злоупотреблений. Работа Trojan Source (CVE-2021-42574, раскрыто в октябре 2021) показала, что символы двунаправленного переопределения могут заставить исходный код компилироваться не так, как он читается на экране. Сопутствующее раскрытие (CVE-2021-42694) описало атаки гомоглифами, где кириллическая а (U+0430) заменяет латинскую a (U+0061) в имени функции. Ближе к обычному использованию — символы нулевой ширины вставляют в имена пользователей и идентификаторы, чтобы две одинаково читающиеся строки сравнивались как разные. Детектор, показывающий эти символы по коду, — самый быстрый способ их найти, потому что глазом их не различить.

Для чего это полезно

Очистка скопированного текста

Текст, вставленный с сайтов, PDF и документов Word, часто несёт пробелы нулевой ширины и мягкие переносы, ломающие поиск и сравнение. Вставьте его сюда, удалите их, скопируйте чистый текст обратно.

Проверка имён и идентификаторов

Два имени, читающихся как «admin», могут быть разными строками, если в одном есть U+200B. Прогоните любой подозрительный идентификатор через детектор, прежде чем доверять сравнению.

Просмотр исходного кода

Символы двунаправленного переопределения (с U+202A по U+202E) могут прятать логику в коде, выглядящем корректно. Вставьте любой фрагмент из ненадёжного источника перед тем, как его читать.

Перехват фишинговых ссылок

Атаки IDN-гомографов используют похожие символы для регистрации обманно похожих доменов. Детектор не распознает домен, но покажет невидимые символы, спрятанные в тексте URL.

Что должна искать серьёзная проверка

Шесть символов выше — самые частые, но это не полная картина. Серьёзная проверка покрывает несколько диапазонов. Форматные символы нулевой ширины с U+200B по U+200F закрывают возможности переноса, соединители и направляющие метки. U+2060 (соединитель слов) и U+FEFF (метка порядка байтов, когда она в середине потока) тоже нулевой ширины. Блок двунаправленного переопределения — с U+202A по U+202E, плюс с U+2066 по U+2069 — это то, что эксплуатирует Trojan Source. U+00AD (мягкий перенос) невидим до переноса строки. Хангыльские заполнители U+115F и U+3164 и брайлевский пробел U+2800 не отрисовываются, но занимают знакоместо, что удобно для прятания содержимого на виду. Поиск похожих символов — связанная, но отдельная задача: кириллическая а и латинская a обе видимы, поэтому детектор символов их не пометит. Для этого нужна проверка по данным confusables из Unicode, которые отображают похожие символы в нормализованный остов.

Как пользоваться детектором

  • Вставляйте только тот текст, который хотите проверить. Всё выполняется в вашем браузере; ничего не загружается.
  • Используйте цветовую кодировку, чтобы отличать типы символов с первого взгляда — красный для ZWSP, зелёный для ZWJ, оранжевый для RLM и так далее.
  • После обнаружения нажмите «Удалить», чтобы вырезать все невидимые символы, затем «Скопировать чистый текст», чтобы получить очищенную версию.
  • Проверяйте любое имя, slug или идентификатор, пришедший от пользовательского ввода, перед сохранением или сравнением.
  • Если сравнение строк не проходит, а строки выглядят одинаково — вставьте их обе сюда, скрытый U+200B обычная причина.
  • Для исходного кода от третьих лиц проверяйте диапазон с U+202A по U+202E перед чтением. Это bidi-переопределения, лежащие в основе Trojan Source.

Как работает детектор

Детектор полностью работает в вашем браузере как JavaScript. Текст не покидает устройство, что важно, когда вы вставляете чувствительные идентификаторы или исходный код. Работает в Chrome, Firefox, Safari, Edge и любом современном браузере на десктопе или мобильном. Он ищет символы нулевой ширины в диапазоне с U+200B по U+200F, bidi-переопределения с U+202A по U+202E и с U+2066 по U+2069, соединитель слов U+2060, мягкий перенос U+00AD и метку порядка байтов U+FEFF, когда она вне первой позиции файла. Учтите, что он помечает невидимые символы по коду; он не обнаруживает гомоглифы — видимые символы, которые просто похожи на другие.

Частые вопросы об обнаружении скрытых символов

Что считается скрытым символом?

Любой Unicode-символ, который отрисовывается без видимого глифа. Распространённые — пробел нулевой ширины (U+200B), соединитель нулевой ширины (U+200D), разделитель нулевой ширины (U+200C), метки слева направо и справа налево (U+200E, U+200F) и мягкий перенос (U+00AD). Детектор помечает каждый по коду.

Откуда скрытые символы в моём тексте?

Три частых источника. Копирование со страницы или PDF импортирует невидимые символы, бывшие в источнике. Редактор или CMS вставляет их для управления переносами. Или кто-то подложил их намеренно — для вотермаркинга, форматирования или чтобы идентификатор сравнивался иначе.

Могут ли скрытые символы быть опасными?

Сами по себе нет. Но в коде, никах и URL они могут менять то, как текст разбирается. Атака Trojan Source (CVE-2021-42574) использовала bidi-переопределения, чтобы компиляторы читали другую логику, нежели видели рецензенты. В никах скрытый U+200B делает так, что две одинаково выглядящие строки сравниваются как разные.

Как удалить скрытые символы?

Вставьте текст, нажмите «Анализировать», затем «Удалить скрытые символы». Инструмент вырезает каждый обнаруженный невидимый символ и оставляет видимый текст нетронутым. Скопируйте результат кнопкой «Скопировать чистый текст».

Мой текст куда-то отправляется?

Нет. Детектор полностью работает в вашем браузере как JavaScript. Ничего не загружается на сервер, поэтому им безопасно пользоваться на исходном коде, учётных данных или любом тексте, который нельзя раскрывать.

Обнаруживает ли это атаки гомоглифов?

Нет. Гомоглифы — видимые символы: кириллическая а (U+0430) выглядит идентично латинской a (U+0061), но обе отрисовываются нормально. Этот инструмент помечает невидимые символы. Для обнаружения похожих нужна проверка по данным confusables из Unicode, которые отображают похожие символы в нормализованный остов.