BiDi‑контролы и скрытые изменения направления текста: примеры реальных проблем
BiDi‑символы (Bidirectional controls) — это управляющие символы Unicode, которые задают или переопределяют направление текста (слева направо или справа налево). Они жизненно необходимы для корректного отображения смешанных письменностей — например, арабского текста с латинскими числами.
Но за пределами специализированных языковых сценариев BiDi‑контролы часто попадают в данные случайно и создают скрытые, трудно диагностируемые ошибки.
Какие BiDi‑символы встречаются чаще всего
На практике чаще всего обнаруживаются:
- RLO / LRO (Right-to-Left / Left-to-Right Override) — полностью меняют порядок символов;
- RLE / LRE — принудительное направление блока текста;
- PDF (Pop Directional Formatting) — завершает действие предыдущих;
- LRM / RLM — маркеры направления, визуально незаметные.
Все они невидимы, но активно влияют на интерпретацию строки.
Пример 1: визуально корректный, логически неправильный текст
Строка выглядит так:
invoice_12345.pdf
Но внутри неё присутствует RLO, из-за чего фактический порядок символов может быть:
invoice_54321.pdf
Пользователь видит одно имя файла, система обрабатывает другое.
Это критично для:
- загрузки файлов;
- проверки расширений;
- систем контроля доступа.
Пример 2: опасность в коде и конфигурациях
В исходном коде строка может выглядеть безопасно:
if (isAdmin) allowAccess();
Но с BiDi‑контролами реальный порядок может быть иным, например:
- комментарий визуально «перекрывает» код;
- часть инструкции выглядит закомментированной, но реально исполняется.
Такие техники уже использовались для маскировки вредоносного кода и усложнения code review.
Пример 3: сбои при копировании и передаче данных
Текст:
Order ID: ABC123
После копирования в другую систему:
- символы меняют порядок;
- регулярные выражения не совпадают;
- идентификатор не проходит проверку.
В логах и CRM это выглядит как «случайная ошибка», хотя причина — скрытые BiDi‑контролы.
Пример 4: юридические и финансовые документы
В договорах и счетах:
- номер документа визуально читается корректно;
- при экспорте в PDF, CSV или XML порядок символов меняется;
- автоматическая проверка подписей или номеров даёт сбой.
Это особенно опасно в системах, где визуальное соответствие не гарантирует логическую идентичность.
Пример 5: поиск, сортировка и аналитика
Для аналитических систем BiDi‑контролы — это полноценные символы:
- строки, выглядящие одинаково, считаются разными;
- сортировка даёт неожиданные результаты;
- поиск не находит «очевидные» совпадения.
В больших датасетах такие ошибки могут искажать отчёты месяцами.
Почему BiDi‑контролы нельзя хранить в пользовательских данных
В большинстве систем:
- нет необходимости управлять направлением текста на уровне данных;
- направление определяется интерфейсом (CSS, UI‑логика);
- хранение BiDi‑контролов не даёт преимуществ, но увеличивает риски.
Они:
- усложняют отладку;
- мешают валидации;
- создают векторы атак и ошибок.
Рекомендованная практика
Для безопасной обработки данных рекомендуется:
- удалять BiDi‑контролы из пользовательского ввода;
- очищать тексты перед сохранением, экспортом и анализом;
- применять Unicode‑нормализацию;
- использовать BiDi‑управление только на уровне отображения, а не хранения.
Вывод
BiDi‑контролы решают важные задачи в многоязычной типографике, но в обычных документах и пользовательских данных они представляют скрытую угрозу.
Текст может выглядеть корректно для человека и при этом быть логически искажённым для системы.
Удаление BiDi‑символов — это не упрощение, а базовая мера надёжности, безопасности и предсказуемости данных.