Ръководство · Риск в съобщения · · Стефан Цезаров · обновено на
Текстът, който не виждаш
Две съобщения може да изглеждат съвсем еднакво и да съдържат напълно различни символи.
Копираш съобщение.
Изглежда нормално.
Три обикновени изречения. Нищо странно.
Поставяш го в документ, сайт, портфейл или AI асистент.
И изведнъж се случва нещо, което съобщението, такова каквото го видя, никога не е казвало.
Как?
Защото това, което виждаш на екрана, не е непременно всичко, което има в текста.
Някои символи изобщо не заемат видимо място.
Те пак са там.
Пак могат да се копират, поставят, съхраняват и обработват.
Просто не можеш да ги видиш.
Компютърът не вижда буквите като теб
Когато гледаш изречение, виждаш форми.
Компютърът вижда данни.
Буквата A например е представена от Unicode символ с конкретна кодова точка. Интервалът е друг символ. Всяка буква, цифра, препинателен знак и много други символи имат свое представяне.
Но не всеки символ рисува видима форма.
Някои символи казват на софтуера как да се държи текстът.
Те могат да кажат на програмата:
- свържи тези символи
- не пренасяй реда тук
- покажи тази част отдясно наляво
- промени реда на тези символи
- или, в някои случаи, просто да заемат позиция, без да рисуват нищо
Така може да имаш два текста, които изглеждат еднакво, а са различни поредици от символи.
Тази разлика може да има значение.
Голямо.
Три вида невидим текст, които си струва да познаваш
Механизмите са няколко, но три от тях е особено полезно да разбираш.
1. Символи, които не се показват
Те често се наричат символи с нулева ширина (zero-width).
Примери са zero-width space, zero-width joiner и word joiner.
Те заемат позиция в текста, но не рисуват видими пиксели.
Например тези две думи може да изглеждат еднакво:
payment
payment
Във втората има невидим символ.
Вероятно не можеш да го видиш.
Компютърът ти може.
Значи двата низа всъщност не са еднакви.
Това може да засегне търсения, филтри, потребителски имена, идентификатори и други системи, които сравняват реалните символи, а не това, което вижда човек.
И има законна причина някои от тези символи да съществуват.
Ще се върнем на това.
2. Символи, които сменят реда, който виждаш
Някои невидими символи влияят на посоката на текста.
Това е нужно, защото езици като арабския и иврита се пишат отдясно наляво, а английският — отляво надясно.
Изречение, което съдържа и двете, може да изисква инструкции как да се покажат различните части.
Тези инструкции могат да са полезни.
Но могат и да бъдат злоупотребени.
Символ за управление на посоката може да накара символите, съхранени от компютъра, да се покажат на екрана в друг ред.
Това създава очевиден проблем със сигурността.
Име на файл например може да изглежда, че завършва с едно разширение, докато реалната поредица от символи казва друго.
Същият принцип може да има значение и в изходен код.
Проверяващият вижда едно.
Компютърът обработва друго.
3. Символи, които могат да носят невидимо съобщение
Това е необичайният случай.
Unicode съдържа диапазон, наречен блок Tags.
Тези символи са създадени за маркиране и обикновено са невидими при показване.
Интересното е, че отделните tag символи могат да представят обикновени ASCII символи.
Събери достатъчно от тях и те могат да кодират текст.
Така едно изречение може да съдържа допълнителен низ от символи, който не се появява на екрана.
За очите ти съобщението може да изглежда като съвсем обикновен поздрав.
За софтуер, който чете реалните символи, там може да има много повече.
И тази разлика става особено интересна, когато дестинацията е AI асистент.
AI не вижда съобщението ти като снимка на екрана.
Той обработва символите.
Така нещо, което не можеш да видиш, пак може да е част от входа.
Ето как изглежда това
Вземи това изречение:
Send the payment to the address below.
Изглежда нормално, нали?
Сега си представи, че в него са вмъкнати невидими символи.
На екрана ти то пак може да изглежда така — а това тук е истинското, подготвено, за да го тестваш:
Send the payment to the address below.
Но отдолу компютърът всъщност може да държи допълнителни символи.
Например:
Какво виждаш:
Send the payment to the address below.
Какво получава компютърът:
Send the невидим payment невидим … TAGS
Видимото изречение не се е променило.
Реалният низ се е променил.
Това е важната идея.
Същият вид. Различни данни.
Ако пуснеш специално подготвения пример през скенер, той може да разпознае тези символи, макар очите ти да не могат.
Напиши видимото изречение на ръка и скритите символи не идват с него.
Това е целият трик.
Буквата, която не е буквата
Невидимите символи не са единственият проблем.
Понякога символът е напълно видим.
Просто не е символът, за който го мислиш.
Виж тези два:
savesavesave
sаvesavesave
Почти невъзможно е да ги различиш.
Но погледни внимателно втория.
Вторият символ не е латинската буква a.
Той е кирилско а.
Изглеждат еднакво.
Те са различни символи.
Тази техника се нарича атака с хомоглифи.
Същата идея може да се използва с потребителски имена, имена на домейни, имена на токени и други идентификатори.
Фалшив акаунт може да използва символ двойник.
Фалшив сайт може да използва домейн двойник.
За човека името може да изглежда познато.
За компютъра това е напълно различен низ.
Къде това наистина може да създаде проблеми?
Това не е просто странен Unicode трик.
Има значение навсякъде, където текст се копира, сравнява или по него се действа.
AI асистенти
Поставяш съобщение в AI асистент.
Виждаш въпрос.
Реалният текст може да съдържа символи, които не са видими за теб.
Понеже асистентът обработва реалния текст, а не само видимия вид, тези символи стават част от входа.
Затова проверката за невидими символи може да е полезна, преди да поставиш недоверен текст в система, която може да предприема действия или да обработва чувствителна информация.
Потребителски имена и имена на акаунти
Два акаунта може да изглеждат, че имат едно и също име, а да съдържат различни символи.
Това прави имитацията много по-трудна за забелязване.
Връзки и домейни
Връзката може да съдържа символи, които приличат на познати букви.
Името, което разпознаваш, не е непременно точният домейн, за който го мислиш.
Код
Символите за управление на посоката и други необичайни Unicode символи могат да направят изходния код по-труден за правилна проверка.
Разработчикът вижда показания текст.
Компилаторът вижда реалните символи.
Търсене и филтриране
Филтърът обикновено сравнява низове.
Вмъкни невидим символ и низът се променя.
Това може да засегне търсения, черни списъци, системи за модерация и други инструменти за обработка на текст.
Как да провериш?
Не е нужно да ставаш експерт по Unicode.
Има няколко прости проверки.
ПРОВЕРКА 1 — Сканирай текста
Постави подозрителния текст в скенер за сигурност на символите.
Полезният скенер трябва да ти каже:
- дали има невидими символи
- колко са открити
- кои символи са
- към кое Unicode семейство принадлежат
- дали са открити символи двойници
За това е създаден скенерът на този сайт.
Важното е той да ти казва какво реално е открил, а не просто да ти свети загадъчна зелена или червена лампичка.
ПРОВЕРКА 2 — Сравни броя символи
Това е бърза проверка за здрав разум.
Ако изречение изглежда, че съдържа 38 символа, а брояч на символи отчита 47, имаш разлика, която си струва да разследваш.
Броят символи няма да ти каже какви са допълнителните символи.
Но може да ти каже, че там има нещо, което не виждаш.
ПРОВЕРКА 3 — Напиши текста отново, когато е уместно
Ако някой ти прати кратка инструкция и не е нужно да запазиш оригиналното форматиране, ръчното изписване на важната част може да премахне невидимите символи от копирания текст.
Но помни:
Повторното изписване не прави дестинацията надеждна.
Ако някой ти прати подозрителен уеб адрес например, ръчното му изписване не доказва, че самият сайт е легитимен.
Това е просто начин да избегнеш скрити символи в текста, който копираш.
ПРОВЕРКА 4 — Прочети реалния домейн
Не разчитай само на това, че разпознаваш как изглежда домейнът.
Ако връзката има значение, провери реалния домейн.
За важни акаунти използвай вече запазена отметка или напиши познатия адрес сам, вместо да следваш неочаквана връзка.
Същият принцип важи за потребителски имена и адреси на портфейли:
да разпознаеш формата не е същото като да провериш символите.
Не изпадай в паника, когато откриеш невидим символ
Това е важно.
Невидим не значи автоматично зловреден.
Някои невидими Unicode символи съществуват, защото хората наистина имат нужда от тях.
Zero-width joiner например може да влияе на това как се свързват символите в различни писмености.
Използват се и в последователности от емоджи.
Символите за посока са нужни, за да се показва правилно текст, който смесва писмености отляво надясно и отдясно наляво.
Така че откритият невидим символ не значи автоматично:
„Това е атака.“
Значи:
Тук има нещо, което не мога да видя.
Какво значи това зависи от контекста.
Кой е изпратил текста?
Какво те кара да направиш текстът?
Къде се каниш да го поставиш?
Отива ли в AI асистент, портфейл, сайт, терминал или друга система, която ще действа по него?
Тези въпроси имат значение.
Блокът Tags заслужава повече внимание
Tags символите са необичайни, защото предназначението им е да представят информация, оставайки невидими при нормално показване на текст.
Ако непознат ти прати съобщение с неочаквана поредица от тях, това си струва да се разследва.
Скенерът може да покаже, че символите съществуват, и, където е уместно, да декодира текста, който представят.
Но и тогава откриването не ти казва намерението на подателя.
Казва ти какво има в текста.
Това е много по-полезен и защитим отговор.
Какво ти казва чистото сканиране — и какво не
Това е още едно място, където инструментите за сигурност трябва да са честни.
Скенерът открива символи.
Не чете мисли.
Ако скенерът открие невидими символи, може да ти каже какви са.
Не може да ти каже кой ги е вмъкнал.
Не може да докаже защо са вмъкнати.
А ако не открие нищо, това не значи, че самото съобщение е надеждно.
Съвсем нормално изглеждащо изречение пак може да съдържа лъжа, зловредна връзка или опасна инструкция.
По същия начин съобщение с невидим символ може да е напълно безобидно.
Има и граници на автоматичното откриване на хомоглифи. Скенерът може да проверява известни символи двойници и известни набори от символи, но никоя отделна проверка не бива да се приема като гаранция, че е открита всяка възможна визуална измама.
Резултатът ти казва какво е открито.
Пак ти решаваш какво значи текстът и дали имаш доверие на източника му.
Простият навик, който си струва да изградиш
Не е нужно да се страхуваш да копираш и поставяш.
Просто забави темпото, когато текстът, който копираш, ще накара нещо да се случи.
AI асистент.
Портфейл.
Сайт.
Команден ред.
Акаунт.
Финансова транзакция.
Парче код.
Ако не си написал текста сам, не знаеш непременно всичко, което има в него.
И не е нужно да гадаеш.
Провери символите, преди да ги оставиш да действат.
Отнема секунди.
И в много случаи проверката е безплатна.
Статията е с образователна цел. Тя обяснява как невидими Unicode символи, символи за посока на текста и символи двойници могат да влияят на дигитален текст. Примерът на тази страница съдържа умишлено вмъкнати невидими символи, за да можеш сам да разгледаш механизма. Скритият текст е безобиден и съществува само за демонстрация.
Невидимите символи оцеляват при копиране и поставяне, така че скенерът ги вижда така или иначе. За да пропуснеш поставянето, използвай отметката за сканиране на маркиран текст.