| Termin | Definicja |
|---|---|
| ukrycie znaku diakrytycznego | Ukrycie znaku diakrytycznego to technika maskowania tekstu w celu ominięcia filtrów analizujących treść. Na czym polega ukrycie znaku diakrytycznegoUkrycie znaku diakrytycznego oznacza takie przekształcenie tekstu, w którym znak nad literą, pod literą albo obok niej przestaje być rozpoznawany przez prosty filtr jako część przewidywanego słowa. Dotyczy to między innymi polskich liter „ą”, „ć”, „ę”, „ł”, „ń”, „ó”, „ś”, „ź” i „ż”, ale także znaków używanych w innych alfabetach. W zapisie Unicode litera może występować jako pojedynczy znak złożony, na przykład „ą”, albo jako litera „a” połączona z osobnym znakiem łączącym, czyli combining mark. Wizualnie oba warianty mogą wyglądać podobnie, lecz program porównujący surowe ciągi bajtów może potraktować je jako różne dane. W praktyce termin ten opisuje problem analizy tekstu, a nie funkcję konkretnego systemu operacyjnego. Filtr oparty wyłącznie na prostym wyszukiwaniu znaków może nie wykryć słowa zapisanego z inną reprezentacją Unicode, z niewidocznym znakiem łączącym albo z literą podobną graficznie do oczekiwanej. Różnica może powstać już podczas kopiowania tekstu ze strony internetowej, importu danych z pliku, odczytu wiadomości lub przetwarzania formularza. Dlatego sam wygląd napisu na ekranie nie wystarcza do oceny, czy dwa teksty są identyczne z punktu widzenia programu. Reprezentacja Unicode a wynik porównaniaKluczowym pojęciem jest normalizacja Unicode. Standard definiuje między innymi formy NFC i NFD. NFC zwykle łączy możliwe sekwencje w znaki złożone, natomiast NFD rozdziela znak podstawowy i znak diakrytyczny na osobne elementy. Dla przykładu tekst zawierający „é” może zostać zapisany jako pojedynczy punkt kodowy albo jako „e” oraz znak akcentu. Obie postacie mogą mieć ten sam wygląd, ale ich reprezentacja binarna jest inna. Formy NFKC i NFKD dodatkowo uwzględniają kompatybilność, więc mogą zmieniać także niektóre warianty typograficzne. Jeżeli aplikacja normalizuje dane przed porównaniem, wyszukiwaniem lub walidacją, część różnic znika. Nie rozwiązuje to jednak wszystkich przypadków. Osobną kategorię stanowią znaki podobne wizualnie, lecz należące do różnych alfabetów, na przykład łacińska litera „a” i cyrylicka litera „а”. Występują też znaki o szerokości zerowej oraz znaki kontrolne, które mogą wpływać na indeksowanie, wyświetlanie lub podział tekstu. Istotne jest również rozróżnienie między porównaniem binarnym, porównaniem zależnym od reguł językowych oraz porównaniem bez uwzględniania wielkości liter i akcentów. Każdy z tych mechanizmów może zwrócić inny wynik. Dlaczego proste filtry rozpoznają taki tekst błędnieFiltr tekstowy może działać na kilku poziomach: jako wyszukiwanie podłańcucha, wyrażenie regularne, porównanie tokenów albo analiza po usunięciu znaków diakrytycznych. Błąd pojawia się wtedy, gdy etap filtrowania używa innej reprezentacji niż etap zapisu, wyszukiwania lub prezentacji. Przykładowo walidator może sprawdzić surowy ciąg znaków, a późniejszy moduł wyświetlić tekst po normalizacji. Odwrotna kolejność również jest ryzykowna, jeżeli filtr usuwa znaki łączące, lecz nie kontroluje znaków podobnych z innych bloków Unicode. Bezpieczne przetwarzanie powinno jasno określać, w jakiej postaci tekst jest przyjmowany, przechowywany i porównywany. Należy stosować uzgodnioną normalizację, poprawnie dekodować UTF-8 oraz sprawdzać, czy dane wejściowe nie zawierają nieoczekiwanych znaków kontrolnych lub niewidocznych. W miejscach, w których dopuszczalny jest ograniczony alfabet, skuteczniejsza bywa lista dozwolonych znaków niż próba tworzenia wyłącznie listy zakazanych wariantów. Dla diagnostyki pomocne jest wyświetlenie punktów kodowych, długości tekstu w znakach oraz liczby bajtów, ponieważ te wartości mogą ujawnić różnicę niewidoczną na ekranie. Rozpoznawanie problemu na laptopie i komputerzeObjawem może być sytuacja, w której wyszukiwanie nie znajduje widocznego słowa, formularz odrzuca tekst mimo poprawnego wyglądu albo dwa pozornie takie same identyfikatory są traktowane jako różne. Podczas sprawdzania warto porównać tekst wpisany ręcznie z tekstem skopiowanym z przeglądarki, edytora lub komunikatora. Należy też ustalić kodowanie pliku, sposób normalizacji używany przez aplikację i moment, w którym dane są filtrowane. Samo ponowne uruchomienie komputera zwykle nie usuwa przyczyny, ponieważ problem znajduje się w danych albo w regułach programu. Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów, komputerów PC i podzespołów, a w przypadku problemów z aplikacją można dodatkowo sprawdzić ustawienia regionalne, aktualność programu, obsługę Unicode oraz zgodność używanych plików z UTF-8. Jeżeli problem występuje tylko w jednym programie, porównanie tego samego tekstu w innym edytorze pomaga rozdzielić błąd aplikacji od błędu systemowego. Warto zachować przykładowy tekst testowy i dokładny opis objawu, ale nie przekazywać przypadkowych danych logowania ani innych poufnych treści. |