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

Переопределения направления

RIGHT-TO-LEFT OVERRIDE (U+202E)

Невидимый управляющий символ, который заставляет выкладывать все последующие символы справа налево, независимо от того, к какой письменности они относятся.

Кодовая позиция
U+202E
Другие записи
u202e\u202e‮
Удаляется по умолчанию
Да
Управляющий параметр
Параметр не нужен
Может нести нагрузку
Нет

Скопировать и вставить U+202E

Чтобы скопировать и вставить RIGHT-TO-LEFT OVERRIDE (U+202E), нажмите кнопку: в буфер обмена попадёт сам символ, а Ctrl+V (Cmd+V на Mac) вставит его в любое место, где можно печатать.

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

Откуда он берётся

Из законного текста он приходит почти никогда. Известность ему принесла атака с переопределением направления в имени файла: `invoice‮fdp.exe` показывается как `invoiceexe.pdf`, и пользователь дважды щёлкает по исполняемому файлу, думая, что открывает документ.

Почему это важно

Он меняет то, что видит читатель, не меняя того, что читает компьютер. Это и есть определение подменяющего символа: показанный порядок и логический расходятся, поэтому имя файла, ссылку или идентификатор в коде можно выдать за что-то другое.

До и после

RIGHT-TO-LEFT OVERRIDE (U+202E) до и после очистки, скрытый символ показан подписанной плашкой
Справочная карточка этого символа: кодовая позиция, вердикт и то же самое до и после, одной картинкой.
ДоinvoiceU+202Efdp.exe
Послеinvoicefdp.exe

До чистки большинство программ показывает это как «invoiceexe.pdf». Байты такого никогда не говорили.

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

Когда он уместен

В прозе он нужен фактически никогда. Правильный двунаправленный текст получается из самих символов по алгоритму bidi, а там, где явная подсказка всё же нужна, современный и безопасный выбор дают изоляты (U+2066-U+2069).

Как его удалить

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

Текст лежит в файле, а не в буфере обмена? Отчёт по документу для .docx, .odt и .html находит символ внутри файла вместе со скрытыми фрагментами и исправлениями, и открывать файл для этого не нужно. Если вопрос в том, что делает остальной текст, а не этот один символ, можно посчитать слова и обороты-приметы на тысячу слов и увидеть, где проявляется каждая привычка: без баллов и без утверждений о том, кто написал текст.

Это водяной знак ИИ?

Не водяной знак

Нет. Это инструмент подмены, а не отметка о происхождении. Если вы нашли такой символ в имени файла, в названии пакета или в исходнике, считайте его враждебным, а не курьёзным.

Никак не связан с машинно сгенерированным текстом. Он приходит из программы, с клавиатуры или от человека.

Вопросы

Что за атака с переопределением направления в имени файла?

U+202E внутри имени файла разворачивает отображение всего, что идёт после него, и исполняемый файл можно показать с расширением документа. Файл на диске не меняется; лжёт только отрисовка.

Важно ли это в исходном коде?

Да. Bidi-символы в комментариях и строковых литералах могут заставить проверенный код выглядеть не так, как он компилируется. Большинство компиляторов теперь на них предупреждает.

Есть ли причина его оставить?

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

Проверьте свой текст

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

Проверьте свой текстОчищать в Chrome прямо при вставкеОчищать на Mac одной комбинацией клавишВсе символы

Анонимная статистика?

Ghostchars обрабатывает ваш текст в браузере и никуда его не отправляет. Мы хотели бы считать просмотры страниц через собственный сервер аналитики, почти без cookie: содержимое не собирается никогда.