Ghost Character Unicode: Mengapa Teks yang Terlihat Sama Bisa Berbeda
Karakter Unicode yang tidak terlihat atau tampak mirip dapat memengaruhi pencarian, validasi, log, dan debugging. Berikut cara membaca code point, bukan hanya tampilan.
Apa itu ghost character? Istilah ini merujuk pada karakter Unicode yang tidak terlihat, sulit dibedakan, atau memiliki bentuk visual yang mirip dengan karakter lain. Unicode sendiri adalah standar untuk merepresentasikan teks dari banyak bahasa dan simbol. Masalahnya bukan bahwa semua karakter seperti ini berbahaya, melainkan bahwa tampilan visual tidak selalu menggambarkan isi string secara lengkap.
1. Mengapa bug ini sulit dilihat
Manusia membaca bentuk visual, sedangkan program membaca code point. Akibatnya, dua teks yang tampak sama dapat dibandingkan secara berbeda oleh sistem. Perbedaan ini dapat muncul pada pencarian, validasi input, log, dan proses copy-paste. Sebuah identifier yang terlihat normal belum tentu memiliki urutan code point yang sama dengan identifier lain.
2. Dampak untuk developer
Masalah Unicode tidak otomatis berarti serangan. Namun, sistem yang menerima identifier, URL, nama file, atau kredensial perlu memperlakukan teks secara eksplisit. Normalisasi, pembatasan karakter, dan pemeriksaan code point dapat mengurangi kejutan. Aturan yang tepat tetap bergantung pada domain; normalisasi yang terlalu agresif juga dapat mengubah data yang seharusnya dipertahankan.
3. Langkah praktis saat debugging
Saat menemukan perilaku yang tidak masuk akal, cetak representasi escaped dan code point, bukan hanya teks yang dirender. Dokumentasikan bentuk normalisasi yang dipakai. Untuk data sensitif, validasi harus mengikuti aturan domain, bukan sekadar pemeriksaan visual. Pengujian juga sebaiknya mencakup input yang memiliki combining mark, karakter tak terlihat, dan karakter yang bentuknya mirip.
Kesimpulannya, mata manusia bukan parser. Memahami perbedaan antara tampilan dan code point membantu developer membuat pencarian, validasi, dan logging yang lebih dapat dipercaya.
Referensi: https://www.dampfkraft.com/ghost-characters.html