Οδηγός · Κίνδυνος μηνυμάτων · · Stefan Tsezarov · ενημέρωση
Το κείμενο που δεν μπορείς να δεις
Δύο μηνύματα μπορεί να φαίνονται ακριβώς ίδια και να περιέχουν εντελώς διαφορετικούς χαρακτήρες.
Αντιγράφεις ένα μήνυμα.
Φαίνεται κανονικό.
Τρεις συνηθισμένες προτάσεις. Τίποτα παράξενο.
Το επικολλάς σε ένα έγγραφο, έναν ιστότοπο, ένα πορτοφόλι ή έναν βοηθό AI.
Και ξαφνικά συμβαίνει κάτι που το μήνυμα, όπως το είδες, δεν φαινόταν ποτέ να λέει.
Πώς;
Επειδή αυτό που βλέπεις στην οθόνη σου δεν είναι απαραίτητα όλο όσο υπάρχει μέσα στο κείμενο.
Ορισμένοι χαρακτήρες δεν πιάνουν καθόλου ορατό χώρο.
Είναι ακόμη εκεί.
Μπορούν ακόμη να αντιγραφούν, να επικολληθούν, να αποθηκευτούν και να επεξεργαστούν.
Απλώς δεν μπορείς να τους δεις.
Ο υπολογιστής σου δεν βλέπει τα γράμματα όπως εσύ
Όταν κοιτάς μια πρόταση, βλέπεις σχήματα.
Ο υπολογιστής σου βλέπει δεδομένα.
Το γράμμα A, για παράδειγμα, αναπαρίσταται από έναν χαρακτήρα Unicode με συγκεκριμένο σημείο κώδικα. Το κενό είναι άλλος χαρακτήρας. Κάθε γράμμα, αριθμός, σημείο στίξης και πολλά άλλα σύμβολα έχουν τη δική τους αναπαράσταση.
Αλλά δεν παράγει κάθε χαρακτήρας ορατό σχήμα.
Ορισμένοι χαρακτήρες λένε στο λογισμικό πώς να συμπεριφέρεται το κείμενο.
Μπορούν να πουν σε ένα πρόγραμμα:
- ένωσε αυτούς τους χαρακτήρες
- μην αλλάξεις γραμμή εδώ
- εμφάνισε αυτό το τμήμα από δεξιά προς αριστερά
- άλλαξε τη σειρά αυτών των χαρακτήρων
- ή, σε ορισμένες περιπτώσεις, απλώς πιάσε μια θέση χωρίς να σχεδιάσεις τίποτα
Έτσι μπορείς να έχεις δύο κείμενα που φαίνονται ίδια ενώ είναι διαφορετικές ακολουθίες χαρακτήρων.
Αυτή η διαφορά μπορεί να έχει σημασία.
Μεγάλη.
Τρία είδη αόρατου κειμένου που αξίζει να ξέρεις
Εμπλέκονται αρκετοί διαφορετικοί μηχανισμοί, αλλά τρεις είναι ιδιαίτερα χρήσιμοι για να καταλάβεις.
1. Χαρακτήρες που δεν εμφανίζονται
Συχνά λέγονται χαρακτήρες μηδενικού πλάτους.
Παραδείγματα είναι το κενό μηδενικού πλάτους (zero-width space), ο συνδετήρας μηδενικού πλάτους (zero-width joiner) και ο συνδετήρας λέξεων (word joiner).
Πιάνουν μια θέση στο κείμενο αλλά δεν παράγουν ορατά pixels.
Για παράδειγμα, αυτές οι δύο λέξεις μπορεί να φαίνονται ίδιες:
payment
payment
Μέσα στη δεύτερη υπάρχει ένας αόρατος χαρακτήρας.
Μάλλον δεν μπορείς να τον δεις.
Ο υπολογιστής σου μπορεί.
Αυτό σημαίνει ότι οι δύο συμβολοσειρές δεν είναι στην πραγματικότητα ίδιες.
Αυτό μπορεί να επηρεάσει αναζητήσεις, φίλτρα, ονόματα χρηστών, αναγνωριστικά και άλλα συστήματα που συγκρίνουν τους υποκείμενους χαρακτήρες και όχι αυτό που βλέπει ένας άνθρωπος.
Και υπάρχει νόμιμος λόγος που υπάρχουν ορισμένοι από αυτούς τους χαρακτήρες.
Θα επανέλθουμε σε αυτό.
2. Χαρακτήρες που αλλάζουν τη σειρά που βλέπεις
Ορισμένοι αόρατοι χαρακτήρες επηρεάζουν την κατεύθυνση του κειμένου.
Αυτό είναι απαραίτητο επειδή γλώσσες όπως τα αραβικά και τα εβραϊκά γράφονται από δεξιά προς αριστερά, ενώ τα αγγλικά γράφονται από αριστερά προς δεξιά.
Μια πρόταση που περιέχει και τα δύο μπορεί να χρειάζεται οδηγίες που λένε στο λογισμικό πώς να εμφανίσει τα διάφορα μέρη.
Αυτές οι οδηγίες μπορεί να είναι χρήσιμες.
Αλλά μπορεί και να γίνουν αντικείμενο κατάχρησης.
Ένας χαρακτήρας ελέγχου κατεύθυνσης μπορεί να κάνει τους χαρακτήρες που αποθηκεύει ένας υπολογιστής να εμφανίζονται με διαφορετική σειρά στην οθόνη.
Αυτό δημιουργεί ένα προφανές πρόβλημα ασφαλείας.
Ένα όνομα αρχείου, για παράδειγμα, μπορεί να φαίνεται ότι τελειώνει σε μία κατάληξη ενώ η υποκείμενη ακολουθία χαρακτήρων λέει κάτι διαφορετικό.
Η ίδια αρχή μπορεί να έχει σημασία στον πηγαίο κώδικα.
Ένας ελεγκτής βλέπει ένα πράγμα.
Ο υπολογιστής επεξεργάζεται άλλο.
3. Χαρακτήρες που μπορούν να μεταφέρουν αόρατο μήνυμα
Αυτό είναι το ασυνήθιστο.
Το Unicode περιέχει ένα εύρος γνωστό ως μπλοκ Tags.
Αυτοί οι χαρακτήρες σχεδιάστηκαν για σκοπούς σήμανσης και κανονικά είναι αόρατοι όταν εμφανίζονται.
Το ενδιαφέρον είναι ότι μεμονωμένοι χαρακτήρες Tags μπορούν να αναπαριστούν συνηθισμένους χαρακτήρες 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.
Είναι ένα κυριλλικό а.
Μοιάζουν.
Είναι διαφορετικοί χαρακτήρες.
Αυτή η τεχνική είναι γνωστή ως επίθεση ομογλύφων.
Η ίδια ιδέα μπορεί να χρησιμοποιηθεί με ονόματα χρηστών, ονόματα domain, ονόματα tokens και άλλα αναγνωριστικά.
Ένας ψεύτικος λογαριασμός μπορεί να χρησιμοποιεί χαρακτήρα-σωσία.
Ένας ψεύτικος ιστότοπος μπορεί να χρησιμοποιεί domain-σωσία.
Σε έναν άνθρωπο το όνομα μπορεί να φαίνεται γνώριμο.
Για έναν υπολογιστή είναι εντελώς διαφορετική συμβολοσειρά.
Πού μπορεί αυτό να προκαλέσει πραγματικά προβλήματα;
Δεν είναι απλώς ένα παράξενο κόλπο του Unicode.
Έχει σημασία οπουδήποτε το κείμενο αντιγράφεται, συγκρίνεται ή χρησιμοποιείται για ενέργειες.
Βοηθοί AI
Επικολλάς ένα μήνυμα σε έναν βοηθό AI.
Βλέπεις μια ερώτηση.
Το υποκείμενο κείμενο μπορεί να περιέχει χαρακτήρες που δεν είναι ορατοί σε σένα.
Επειδή ο βοηθός επεξεργάζεται το πραγματικό κείμενο, όχι μόνο την οπτική εμφάνιση, αυτοί οι χαρακτήρες γίνονται μέρος της εισόδου.
Γι' αυτό οι έλεγχοι αόρατων χαρακτήρων μπορεί να είναι χρήσιμοι πριν επικολλήσεις μη αξιόπιστο κείμενο σε σύστημα που μπορεί να κάνει ενέργειες ή να επεξεργάζεται ευαίσθητες πληροφορίες.
Ονόματα χρηστών και λογαριασμών
Δύο λογαριασμοί μπορεί να φαίνονται να έχουν το ίδιο όνομα ενώ περιέχουν διαφορετικούς χαρακτήρες.
Αυτό μπορεί να κάνει την πλαστοπροσωπία πολύ πιο δύσκολο να γίνει αντιληπτή.
Σύνδεσμοι και domains
Ένας σύνδεσμος μπορεί να περιέχει χαρακτήρες που μοιάζουν με γνώριμα γράμματα.
Το όνομα που αναγνωρίζεις δεν είναι απαραίτητα το ακριβές domain που νομίζεις.
Κώδικας
Οι χαρακτήρες ελέγχου κατεύθυνσης και άλλοι ασυνήθιστοι χαρακτήρες Unicode μπορούν να κάνουν τον πηγαίο κώδικα πιο δύσκολο να ελεγχθεί σωστά.
Ένας developer βλέπει το κείμενο όπως εμφανίζεται.
Ο μεταγλωττιστής βλέπει τους πραγματικούς χαρακτήρες.
Αναζήτηση και φιλτράρισμα
Ένα φίλτρο συνήθως συγκρίνει συμβολοσειρές.
Πρόσθεσε έναν αόρατο χαρακτήρα και η συμβολοσειρά αλλάζει.
Αυτό μπορεί να επηρεάσει αναζητήσεις, λίστες αποκλεισμού, συστήματα εποπτείας και άλλα εργαλεία επεξεργασίας κειμένου.
Πώς μπορείς να ελέγξεις;
Δεν χρειάζεται να γίνεις ειδικός στο Unicode.
Υπάρχουν μερικοί απλοί έλεγχοι.
ΕΛΕΓΧΟΣ 1 — Σάρωσε το κείμενο
Επικόλλησε το ύποπτο κείμενο σε σαρωτή ασφάλειας χαρακτήρων.
Ένας χρήσιμος σαρωτής πρέπει να σου λέει:
- αν υπάρχουν αόρατοι χαρακτήρες
- πόσοι βρέθηκαν
- ποιοι χαρακτήρες είναι
- σε ποια οικογένεια Unicode ανήκουν
- αν εντοπίστηκαν χαρακτήρες-σωσίες
Αυτό είναι σχεδιασμένος να δείχνει ο σαρωτής αυτού του ιστότοπου.
Το σημαντικό είναι να σου λέει τι πραγματικά βρήκε, αντί να σου δίνει απλώς ένα μυστηριώδες πράσινο ή κόκκινο φως.
ΕΛΕΓΧΟΣ 2 — Σύγκρινε τον αριθμό χαρακτήρων
Αυτός είναι ένας γρήγορος έλεγχος λογικής.
Αν μια πρόταση φαίνεται να έχει 38 χαρακτήρες αλλά ένας μετρητής χαρακτήρων αναφέρει 47, έχεις μια διαφορά που αξίζει διερεύνηση.
Ο αριθμός χαρακτήρων δεν θα σου πει ποιοι είναι οι επιπλέον χαρακτήρες.
Αλλά μπορεί να σου πει ότι υπάρχει κάτι εκεί που δεν βλέπεις.
ΕΛΕΓΧΟΣ 3 — Ξαναπληκτρολόγησε το κείμενο όταν ταιριάζει
Αν κάποιος σου στείλει μια σύντομη οδηγία και δεν χρειάζεται να κρατήσεις την αρχική μορφοποίηση, η χειροκίνητη πληκτρολόγηση του σημαντικού κομματιού μπορεί να αφαιρέσει τους αόρατους χαρακτήρες από το αντιγραμμένο κείμενο.
Αλλά θυμήσου:
Η επαναπληκτρολόγηση δεν κάνει τον προορισμό αξιόπιστο.
Αν κάποιος σου στείλει μια ύποπτη διεύθυνση ιστότοπου, για παράδειγμα, η χειροκίνητη πληκτρολόγησή της δεν αποδεικνύει ότι ο ίδιος ο ιστότοπος είναι νόμιμος.
Είναι απλώς ένας τρόπος να αποφύγεις κρυφούς χαρακτήρες στο κείμενο που αντιγράφεις.
ΕΛΕΓΧΟΣ 4 — Διάβασε το πραγματικό domain
Μη βασίζεσαι μόνο στο ότι αναγνωρίζεις πώς μοιάζει ένα domain.
Αν ένας σύνδεσμος έχει σημασία, έλεγξε το πραγματικό domain.
Για σημαντικούς λογαριασμούς, χρησιμοποίησε σελιδοδείκτη που έχεις ήδη αποθηκεύσει ή πληκτρολόγησε μόνος σου τη γνωστή διεύθυνση αντί να ακολουθήσεις έναν απρόσμενο σύνδεσμο.
Η ίδια αρχή ισχύει για ονόματα χρηστών και διευθύνσεις πορτοφολιών:
το να αναγνωρίζεις το σχήμα δεν είναι το ίδιο με το να επαληθεύεις τους χαρακτήρες.
Μην πανικοβάλλεσαι όταν βρίσκεις αόρατο χαρακτήρα
Αυτό είναι σημαντικό.
Αόρατο δεν σημαίνει αυτόματα κακόβουλο.
Ορισμένοι αόρατοι χαρακτήρες Unicode υπάρχουν επειδή οι άνθρωποι τους χρειάζονται πραγματικά.
Οι συνδετήρες μηδενικού πλάτους, για παράδειγμα, μπορούν να επηρεάζουν πώς ενώνονται οι χαρακτήρες σε διάφορα συστήματα γραφής.
Χρησιμοποιούνται επίσης σε ακολουθίες emoji.
Οι χαρακτήρες ελέγχου κατεύθυνσης είναι απαραίτητοι για τη σωστή εμφάνιση κειμένου που αναμειγνύει αλφάβητα από αριστερά προς δεξιά και από δεξιά προς αριστερά.
Οπότε το να βρεις έναν αόρατο χαρακτήρα δεν σημαίνει αυτόματα:
«Αυτό είναι επίθεση.»
Σημαίνει:
Υπάρχει κάτι εδώ που δεν μπορώ να δω.
Το τι σημαίνει αυτό εξαρτάται από το πλαίσιο.
Ποιος έστειλε το κείμενο;
Τι σου ζητά να κάνεις το κείμενο;
Πού πας να το επικολλήσεις;
Πηγαίνει σε βοηθό AI, πορτοφόλι, ιστότοπο, τερματικό ή κάποιο άλλο σύστημα που θα ενεργήσει με βάση αυτό;
Αυτά τα ερωτήματα έχουν σημασία.
Το μπλοκ Tags αξίζει ιδιαίτερη προσοχή
Οι χαρακτήρες Tags είναι ασυνήθιστοι επειδή ο σκοπός τους είναι να αναπαριστούν πληροφορίες ενώ μένουν αόρατοι στην κανονική εμφάνιση κειμένου.
Αν ένας άγνωστος σου στείλει μήνυμα που περιέχει μια απρόσμενη ακολουθία τέτοιων χαρακτήρων, αξίζει να το ερευνήσεις.
Ένας σαρωτής μπορεί να αποκαλύψει ότι οι χαρακτήρες υπάρχουν και, όπου ταιριάζει, να αποκωδικοποιήσει το κείμενο που αναπαριστούν.
Αλλά ακόμη και τότε, ο εντοπισμός δεν σου λέει την πρόθεση του αποστολέα.
Σου λέει τι υπάρχει στο κείμενο.
Αυτή είναι πολύ πιο χρήσιμη και υπερασπίσιμη απάντηση.
Τι σου λέει — και τι όχι — μια καθαρή σάρωση
Αυτό είναι άλλο ένα σημείο όπου τα εργαλεία ασφαλείας πρέπει να είναι έντιμα.
Ένας σαρωτής εντοπίζει χαρακτήρες.
Δεν διαβάζει σκέψεις.
Αν ο σαρωτής βρει αόρατους χαρακτήρες, μπορεί να σου πει ποιοι είναι.
Δεν μπορεί να σου πει ποιος τους έβαλε.
Δεν μπορεί να αποδείξει γιατί μπήκαν.
Και αν δεν βρει τίποτα, αυτό δεν σημαίνει ότι το ίδιο το μήνυμα είναι αξιόπιστο.
Μια εντελώς κανονική πρόταση μπορεί να περιέχει ψέμα, κακόβουλο σύνδεσμο ή επικίνδυνη οδηγία.
Αντίστοιχα, ένα μήνυμα που περιέχει αόρατο χαρακτήρα μπορεί να είναι εντελώς ακίνδυνο.
Υπάρχουν επίσης όρια στον αυτόματο εντοπισμό ομογλύφων. Ένας σαρωτής μπορεί να ελέγξει γνωστούς χαρακτήρες-σωσίες και γνωστά σύνολα χαρακτήρων, αλλά κανένας μεμονωμένος έλεγχος δεν πρέπει να θεωρείται εγγύηση ότι βρέθηκε κάθε πιθανή οπτική εξαπάτηση.
Το αποτέλεσμα σου λέει τι εντοπίστηκε.
Εσύ εξακολουθείς να πρέπει να αποφασίσεις τι σημαίνει το κείμενο και αν εμπιστεύεσαι την πηγή του.
Η απλή συνήθεια που αξίζει να αποκτήσεις
Δεν χρειάζεται να φοβάσαι την αντιγραφή και την επικόλληση.
Απλώς επιβράδυνε όταν το κείμενο που αντιγράφεις πρόκειται να κάνει κάτι να συμβεί.
Ένας βοηθός AI.
Ένα πορτοφόλι.
Ένας ιστότοπος.
Μια γραμμή εντολών.
Ένας λογαριασμός.
Μια οικονομική συναλλαγή.
Ένα κομμάτι κώδικα.
Αν δεν πληκτρολόγησες το κείμενο μόνος σου, δεν ξέρεις απαραίτητα όλα όσα υπάρχουν μέσα του.
Και δεν χρειάζεται να μαντέψεις.
Έλεγξε τους χαρακτήρες πριν τους αφήσεις να δράσουν.
Παίρνει δευτερόλεπτα.
Και σε πολλές περιπτώσεις ο έλεγχος είναι δωρεάν.
Αυτό το άρθρο είναι μόνο για εκπαιδευτικούς σκοπούς. Εξηγεί πώς οι αόρατοι χαρακτήρες Unicode, οι έλεγχοι κατεύθυνσης κειμένου και οι χαρακτήρες-σωσίες μπορούν να επηρεάσουν το ψηφιακό κείμενο. Το παράδειγμα σε αυτή τη σελίδα περιέχει σκόπιμα εισαγμένους αόρατους χαρακτήρες ώστε να εξετάσεις μόνος σου τον μηχανισμό. Το κρυφό κείμενο είναι ακίνδυνο και υπάρχει μόνο για επίδειξη.
Οι αόρατοι χαρακτήρες επιβιώνουν από την αντιγραφή και την επικόλληση, οπότε ο σαρωτής τους βλέπει έτσι κι αλλιώς. Για να αποφύγεις την επικόλληση, χρησιμοποίησε τον σελιδοδείκτη σάρωσης επιλεγμένου κειμένου.