Скрытые символы

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

Часто задаваемые вопросы

Откуда в тексте скрытые символы?
Чаще всего случайно: их приносят копирование с сайтов и из мессенджеров, текстовые редакторы и сами языковые модели. Иногда их ставят нарочно: метками отслеживают, откуда утёк текст, а невидимыми инструкциями пытаются управлять нейросетью, которая будет его читать. В коде, ссылках, логинах и ключах любой такой символ ломает работу.
Это проверка, написал ли текст ИИ?
Нет. Страница показывает только факты о символах. Невидимые знаки и необычные пробелы встречаются и в текстах людей, а в ответах нейросетей их часто нет. Кто написал текст, по ним не определить.
Что такое Trojan Source?
Символы управления направлением меняют порядок, в котором редактор показывает строку. Код может выглядеть как комментарий, а компилятор прочитает в нём условие. Атаку описали в 2021 году, это CVE-2021-42574. В тексте с отметками такие символы заменены подписями вроде RLO и LRI, поэтому виден настоящий порядок. Похожий приём — разделитель строк U+2028: редактор может его не показать, а для JavaScript это перевод строки, и код после него в строке с комментарием // выполнится.
Как в тексте прячут сообщение?
У каждой латинской буквы и знака ASCII есть невидимая копия в блоке Unicode Tags, от U+E0000 до U+E007F. Из них можно сложить целую фразу, которую человек не увидит, а языковая модель прочитает. Похожий приём — селекторы варианта начертания, цепочкой после эмодзи или по одному после каждой буквы: каждый селектор хранит байт. Оба способа страница расшифровывает и показывает скрытый текст.
Что меняется при очистке?
Невидимые и управляющие символы, метки направления, теги, лишние селекторы, знаки для личного использования и неназначенные коды удаляются. Разделители строк и абзацев становятся обычным переводом строки. Широкие и стилизованные буквы и капители становятся обычными, лишние диакритические знаки сокращаются до двух. Буква из другого алфавита заменяется похожей из основного алфавита слова, а часть адреса или логина, набранная похожими кириллическими или греческими буквами, — латинскими. Редкие пробелы и неразрывные пробелы вне русского текста становятся обычными, а неразрывные пробелы русской типографики остаются.
Что не отмечается?
Обычные части текста: неразрывные пробелы рядом с русскими буквами, цифрами, тире, № и §, соединитель внутри составного эмодзи вроде семьи или профессии, выбор цветного или текстового вида эмодзи, вариант иероглифа или математического знака, флаги Англии, Шотландии и Уэльса, соединители и метки направления в арабском, персидском, иврите и индийских письменностях, монгольские разделители, широкие знаки и пробелы рядом с китайским, японским или корейским текстом, табуляция и переводы строк. Буква из другого алфавита отмечается, когда похожа на букву основного алфавита слова из латиницы, кириллицы, греческого, армянского или чероки, а в адресах и логинах — ещё и когда похожими кириллическими или греческими буквами набрана целая часть. Цифры вместо букв, как в paypa1, и похожие знаки внутри одного алфавита не проверяются.
Сохраняется ли текст?
Проверка идёт в браузере: текст никуда не отправляется, нигде не сохраняется и не попадает в адрес страницы. Если уйти по ссылке и вернуться кнопкой «Назад», браузер может показать страницу вместе с текстом, а после обновления поле будет пустым.