Έλεγχος ομογράφων IDN

Δύο ονόματα μπορούν να γράφονται με διαφορετικούς χαρακτήρες και να διαβάζονται το ίδιο. Τα apple.com και аpple.com — όπου το πρώτο γράμμα είναι το κυριλλικό μικρό a — είναι διαφορετικά ονόματα για το δίκτυο και η ίδια λέξη για τον αναγνώστη. Αυτή η σελίδα αναλύει ένα όνομα και λέει σε ποιο από τα δύο ανήκει: το χωρίζει σε ετικέτες, αποκωδικοποιεί κάθε ετικέτα xn-- πίσω στους χαρακτήρες που μεταφέρει, μετρά τα byte έναντι των ορίων DNS, ονομάζει κάθε ομοιόμορφο χαρακτήρα μαζί με το σύστημα γραφής από το οποίο δανείζεται, και αναγάγει ολόκληρο το όνομα στο σχήμα που μιμείται. Αναφέρει ό,τι βρίσκει και ό,τι δεν βρίσκει, με το ίδιο επίπεδο λεπτομέρειας, ώστε μια καθαρή απάντηση να σημαίνει ότι οι έλεγχοι εκτελέστηκαν και πέρασαν, και όχι ότι δεν εξετάστηκε τίποτα.
Όλη η επεξεργασία γίνεται τοπικά στο πρόγραμμα περιήγησης — το όνομα που πληκτρολογείται δεν μεταφορτώνεται ποτέ και δεν επιλύεται ποτέ.

Νέος εδώ; Τα ομόγραφα IDN εξηγούνται με απλά λόγια — τι κάνει και τι δεν κάνει το punycode, γιατί ένα πρόγραμμα περιήγησης μερικές φορές δείχνει xn--, και γιατί αυτή η σελίδα είναι σύνολο ελέγχων και όχι ετυμηγορία.
Ανάγνωση της εισόδου ως: Αναγωγή του ονόματος πρώτα στο NFC
ΔΙΑΒΑΖΕΤΑΙ ΩΣ —
ΜΟΡΦΗ DNS (τι λαμβάνει ο επιλυτής) —
ΜΕΓΕΘΟΣ —
Δεν έγινε κανένας έλεγχος ακόμη. Πληκτρολόγηση ή επικόλληση ενός ονόματος παραπάνω — ένα όνομα κάθε φορά — ή πάτημα του Φόρτωση παραδείγματος. Η σελίδα διαβάζει ένα απλό όνομα, ένα όνομα που επικολλήθηκε από URL, ή ένα ολόκληρο URL, και δηλώνει ποιο από αυτά πήρε. Κάθε έλεγχος που εκτελεί καταγράφεται κάτω από το αποτέλεσμα, συμπεριλαμβανομένων εκείνων που δεν βρήκαν τίποτα.
Τι είναι ένα ομόγραφο IDN;
Ομόγραφο είναι η λέξη που γράφεται με έναν τρόπο και διαβάζεται με άλλον. Σε όνομα τομέα το τέχνασμα συνήθως κοστίζει έναν χαρακτήρα: το apple.com είναι επτά λατινικά γράμματα, ενώ το аpple.com αρχίζει με U+0430, το κυριλλικό μικρό a, που σχεδιάζεται με το ίδιο σχήμα σε κάθε γραμματοσειρά που υπάρχει. Για το δίκτυο πρόκειται για δύο διαφορετικά ονόματα. Για το μάτι πρόκειται για την ίδια λέξη, και μόνο ένα από τα δύο ανήκει στην Apple.

Τα ονόματα ήταν μόνο ASCII για τις πρώτες δύο δεκαετίες του DNS, γι' αυτό όλα όσα τα αφορούν μετριούνται σε byte και γράμματα: ετικέτες από γράμματα, ψηφία και παύλες, το πολύ 63 byte η καθεμία, το πολύ 255 byte συνολικά. Ένα διεθνοποιημένο όνομα τομέα (IDN) είναι ό,τι συμβαίνει όταν οι κανόνες ανοίγουν σε όλο το υπόλοιπο Unicode, και το punycode (RFC 3492) είναι ο κανόνας γραφής που κρατά τα παλιά συστήματα σε λειτουργία: μια ετικέτα που περιέχει οτιδήποτε εκτός ASCII γράφεται ως ετικέτα xn--, δηλαδή μια συμβολοσειρά ASCII που φέρει τους ίδιους χαρακτήρες σε αναγωγημένη μορφή. Το 中文.com ταξιδεύει ως xn--fiq228c.com, και και οι δύο γραφές ονομάζουν τον ίδιο κεντρικό υπολογιστή.

Το κρίσιμο μέρος εδώ είναι τι δεν κάνει το punycode. Μετατρέπει μόνο τη γραφή και τίποτα άλλο. Δεν έχει γνώμη για το αν το аpple.com πρέπει να επιτρέπεται δίπλα στο apple.com, και δεν θα μπορούσε να ερωτηθεί, επειδή το ερώτημα αφορά τα μάτια και τις γραμματοσειρές και όχι τα byte. Ο καταχωριστής αποφασίζει ποιους χαρακτήρες θα πουλήσει, το πρόγραμμα περιήγησης αποφασίζει πώς θα εμφανίσει ένα όνομα που θεωρεί ασφαλές, και ο αναγνώστης αποφασίζει αν θα κάνει κλικ. Η σελίδα απαντά στο ερώτημα που βρίσκεται από κάτω και από τα τρία: από ποιους χαρακτήρες αποτελείται πραγματικά αυτό το όνομα, και τι κάνει αυτό να γράφει;

Οι περιπτώσεις με τις οποίες ελέγχεται αυτή η σελίδα

Κάθε γραμμή παρακάτω εκτελείται από τη σελίδα κατά τη φόρτωσή της και ξανά με το κουμπί Αυτοέλεγχος, και η σελίδα πρέπει να αναφέρει ακριβώς αυτό που λέει η γραμμή — τα ίδια ευρήματα, το ίδιο επίπεδο, η ίδια μορφή DNS, το ίδιο πλήθος byte, ούτε περισσότερα ούτε λιγότερα. Αυτό κάνει μια καθαρή απάντηση εδώ να έχει αξία: η διαδρομή κώδικα που αφήνει να περάσει ένα συνηθισμένο όνομα είναι η ίδια που πιάνει τα τεχνάσματα παρακάτω.

Ποια είναι η περίπτωση Επίπεδο Όνομα όπως φτάνει Τι πρέπει να αναφέρει η σελίδα

Πώς αποφασίζει η σελίδα
  1. Εξαγωγή του ονόματος από αυτό που επικολλήθηκε. Ένα απλό όνομα χρησιμοποιείται όπως είναι· ένα URL έχει τον κεντρικό υπολογιστή του εξαχθεί και το σχήμα, η θύρα, η διαδρομή και το ερώτημα αφαιρούνται, και η σελίδα δηλώνει ποιο από τα δύο έκανε αντί να αναλύει σιωπηλά μια κάθετο σαν να ήταν μέρος ονόματος.
  2. Καθαρισμός όπως θα έκανε ένας πελάτης. Οι χαρακτήρες ελέγχου, οι χαρακτήρες μηδενικού πλάτους και το σήμα σειράς byte αφαιρούνται· η πλήρης τελεία πλάτους ή η ιδεογραφική τελεία μετρά ως τελεία, και η τελική τελεία είναι η ρίζα και όχι λάθος. Κάθε χαρακτήρας που αφαιρείται ή ερμηνεύεται διαφορετικά με αυτόν τον τρόπο αναφέρεται, επειδή ένα κενό μηδενικού πλάτους που αφαιρέθηκε αθόρυβα είναι ακριβώς αυτό για το οποίο πρέπει να υπάρχει ενημέρωση.
  3. Διαχωρισμός σε ετικέτες και μέτρηση κάθε μιας. Μια ετικέτα δεν επιτρέπεται να είναι κενή, να αρχίζει ή να τελειώνει με παύλα, ή να έχει δύο παύλες στις θέσεις τρία και τέσσερα εκτός αν είναι ετικέτα xn--. Κάθε ετικέτα μετριέται σε byte UTF-8 έναντι του ανώτατου ορίου των 63 byte, και ολόκληρο το όνομα έναντι των 255.
  4. Αποκωδικοποίηση κάθε ετικέτας xn-- πίσω στους χαρακτήρες της. Η αποκωδικοποιημένη ετικέτα κωδικοποιείται ξανά και συγκρίνεται με αυτό που πληκτρολογήθηκε. Μια ετικέτα που δεν επιζεί από αυτή τη διαδρομή δεν είναι η ετικέτα που ισχυρίζεται ότι είναι, και μια ετικέτα που αποκωδικοποιείται σε χαρακτήρα ελέγχου ή σε τίποτα αναφέρεται ως τέτοια αντί να αφαιρείται σιωπηλά.
  5. Ερώτηση για κάθε χαρακτήρα. Ο κωδικός του (code point), τα byte UTF-8 του, το σύστημα γραφής στο οποίο ανήκει, αν βρίσκεται σε ομάδα χαρακτήρων που σχεδιάζονται όμοια, και ποια είναι τα άλλα μέλη της ομάδας. Εδώ το κυριλλικό a παύει να είναι «ένα γράμμα» και γίνεται «ένα γράμμα με σχήμα λατινικού».
  6. Αναγωγή του ονόματος στο σχήμα που μιμείται. Κάθε ομοιόμορφος χαρακτήρας αντικαθίσταται από τον χαρακτήρα που μοιάζει, κάτι που μετατρέπει το аpple.com σε apple.com. Αυτή η αναγωγή είναι η πιο χρήσιμη γραμμή της σελίδας, επειδή το apple.com είναι κάτι που μπορεί να χρησιμοποιηθεί, ενώ το «ένα κυριλλικό a» δεν είναι.
  7. Συλλογή των ευρημάτων και αναφορά του χειρότερου. Κάθε εύρημα αναφέρεται μία φορά, μαζί με τις ετικέτες στις οποίες εμφανίζεται. Ένα όνομα που απλώς μοιάζει ασυνήθιστο παράγει σημειώσεις και όχι ευρήματα: η ανάμειξη Han και Kana, ή η τελική τελεία της ρίζας, είναι συνηθισμένη γραφή και όχι λόγος ανησυχίας.

Τα επίπεδα και τι ισχυρίζονται

καμία τίποτα εδώ δεν άξιζε αναφοράς — χαμηλή το ίδιο όνομα γραμμένο με δεύτερο τρόπο — μεσαία ένας χαρακτήρας που το DNS δεν θα μεταφέρει, ή ένας που αναγάγεται σε απλό γράμμα — υψηλή ένα όνομα φτιαγμένο για να διαβάζεται ως άλλο όνομα, ή ένα που δεν μπορεί να σταλεί καθόλου.

Το επίπεδο είναι το χειρότερο που μπορούν να σημαίνουν τα ευρήματα, όχι πιθανότητα και όχι κρίση για τον ιστότοπο. Ένα απολύτως έντιμο όνομα μπορεί να είναι μεσαίου επιπέδου επειδή περιέχει έναν χαρακτήρα εκτός του αλφαβήτου του κεντρικού υπολογιστή, και ένα εχθρικό όνομα μπορεί να είναι υψηλού επιπέδου με τίποτα πιο εκλεπτυσμένο από ένα κυριλλικό γράμμα. Η λίστα κάτω από το επίπεδο εξηγεί το γιατί, μία γραμμή ανά εύρημα, και αυτή η λίστα είναι το μέρος που αξίζει να διαβαστεί.

Οι έλεγχοι που εκτελεί, ένας προς έναν

Ο πίνακας παρακάτω χτίζεται από την ίδια λίστα από την οποία αναφέρει η σελίδα, οπότε μια γραμμή εδώ και ένα εύρημα σε ένα αποτέλεσμα δεν μπορούν να διαφωνήσουν. Ένας έλεγχος που δεν βρήκε τίποτα εμφανίζεται ως όχι: το νόημα του πίνακα είναι ότι φαίνεται πως η ερώτηση τέθηκε και απαντήθηκε, αντί να αναρωτιέται κανείς αν τέθηκε καθόλου.

Έλεγχος Το χειρότερο που μπορεί να σημαίνει Τι ελέγχει

Η ίδια λίστα τροφοδοτεί τις σημειώσεις, που δεν φέρουν καθόλου επίπεδο: μία ετικέτα χωρίς τελεία μέσα της, μια τελική τελεία ρίζας, ένας τομέας πρώτου επιπέδου που δεν είναι ASCII, ένας διαχωριστής διαφορετικός από την τελεία, ένα όνομα με κεφαλαία, χαρακτήρες που αφαιρέθηκαν κατά τον καθαρισμό και ένα URL που περιορίστηκε στον κεντρικό υπολογιστή του.

Τα όρια που επιβάλλει το DNS

Ένα όνομα είναι λίστα ετικετών και κάθε μία μετριέται σε byte, όχι σε χαρακτήρες. Αυτή η διάκριση είναι όλος ο λόγος ύπαρξης του punycode: το 中文 είναι δύο χαρακτήρες και έξι byte, και η μορφή του xn-- του είναι δεκαπέντε χαρακτήρες, οπότε η κωδικοποιημένη γραφή είναι αυτή που πρέπει να χωρέσει. Η σελίδα εφαρμόζει και τα δύο όρια και αναφέρει ποιο από τα δύο χτυπήθηκε.

Όριο Τιμή Τι συμβαίνει στο άκρο
Γιατί ένα πρόγραμμα περιήγησης μερικές φορές εμφανίζει xn--

Ίσως έχει παρατηρηθεί ότι ένα όνομα γραμμένο στα κινέζικα ή στα κυριλλικά εμφανίζεται μερικές φορές στη γραμμή διευθύνσεων ως ακατανόητο xn-- αντί για τους χαρακτήρες που αναμένονται. Αυτό είναι το πρόγραμμα περιήγησης που αρνείται να εμφανίσει τη ωραία μορφή, όχι ο ιστότοπος που αποτυγχάνει να το καταχωρίσει. Ένα πρόγραμμα περιήγησης εφαρμόζει δικό του κανόνα σε ένα όνομα που δεν έχει ξαναδεί, και ο κανόνας υπάρχει για τον λόγο για τον οποίο υπάρχει ολόκληρη αυτή η σελίδα: η εμφάνιση του аpple.com ως аpple.com είναι ακριβώς αυτό που θέλει ένας επιτιθέμενος, οπότε ένα άγνωστο όνομα μικτού συστήματος γραφής εμφανίζεται στην κωδικοποιημένη του γραφή μέχρι να έχει φανεί αρκετά συχνά ώστε να εμπιστεύεται.

Πού εμφανίζεται το όνομα Τι εμφανίζεται Γιατί

Τι δεν κάνει αυτή η σελίδα
Πρόκειται για σύνολο ελέγχων, όχι για ετυμηγορία, και όχι για λίστα αποκλεισμού. Αναφέρει από τι αποτελείται ένα όνομα· δεν γνωρίζει τι κάνει ο ιστότοπος. Ένα όνομα μπορεί να περάσει όλους τους ελέγχους εδώ και να είναι παρ' όλα αυτά σελίδα phishing, και ένα όνομα μπορεί να επισημανθεί ως όνομα μικτού συστήματος γραφής και να είναι απολύτως συνηθισμένος ιστότοπος που ανήκει σε κάποιον που γράφει τη δική του γλώσσα. Οι ομάδες σχημάτων είναι ένα χειροκίνητο υποσύνολο των ομοιόμορφων χαρακτήρων του UTS #39, οπότε ένα ζεύγος χαρακτήρων που η σελίδα δεν γνωρίζει δεν θα αναφερθεί. Και τίποτα εδώ δεν επιλύεται, δεν λαμβάνεται ούτε αναζητείται: το όνομα που πληκτρολογείται δεν φεύγει ποτέ από το πρόγραμμα περιήγησης, πράγμα που σημαίνει επίσης ότι η σελίδα δεν μπορεί να γνωρίζει αν ένα όνομα υπάρχει.
Από πού προέρχονται οι κανόνες

Το punycode είναι το RFC 3492, και ο αυτοέλεγχος της σελίδας εκτελεί τις έντεκα δειγματικές ετικέτες που τυπώνονται σε εκείνο το έγγραφο ως πρώτο έλεγχο, ώστε ο κωδικοποιητής εδώ να κρίνεται με βάση τα παραδείγματα του προτύπου και όχι με βάση τον εαυτό του. Οι κανόνες επεξεργασίας που περνά ένα IDN είναι το RFC 5891 με τους πίνακες χαρακτήρων του RFC 5892, και το επίπεδο συμβατότητας που εφαρμόζουν πράγματι τα προγράμματα περιήγησης είναι το UTS #46 με τη σημαία μη μεταβατικής λειτουργίας· η σελίδα λέει τι κάνουν αυτοί οι κανόνες αντί να προσποιείται ότι τους υλοποιεί, και η αναγωγή που εφαρμόζει — NFC και μετά πεζά, και μετά RFC 3492 — είναι η ίδια σύντομη ακολουθία που εκτελεί ένας πελάτης πριν σταλεί ένα όνομα. Οι ομάδες σχημάτων, τα εύρη συστημάτων γραφής και οι πίνακες αόρατων χαρακτήρων σε αυτή την οικογένεια σελίδων γράφτηκαν χειροκίνητα για την οικογένεια· τα πρότυπα αναφέρονται ώστε να μπορεί κανείς να τα διαβάσει μόνος του, και δεν αναπαράγεται κανένα κείμενό τους εδώ.

Ερωτήσεις

Είναι πάντα επίθεση ένα όνομα μικτού συστήματος γραφής;

Όχι, και η αντιμετώπιση έτσι θα ήταν λάθος με σημαντικό τρόπο. Τα ιαπωνικά γράφουν χαρακτήρες Han και Kana στην ίδια λέξη, και τα κορεατικά γράφουν χαρακτήρες Han μέσα σε χαρακτήρες Hangul. Αυτό που δεν έχει συνηθισμένη εξήγηση είναι το λατινικό μαζί με το κυριλλικό ή το ελληνικό σε μία ετικέτα, επειδή αυτά τα συστήματα γραφής δεν χρησιμοποιούνται μαζί σε καμία γλώσσα, και η σελίδα χαράσσει αυτή τη γραμμή αντί να επισημαίνει κάθε μείξη. Γι' αυτό οι γραμμές για τα ιαπωνικά και κορεατικά στον πίνακα περιπτώσεων παραπάνω επιστρέφουν καθαρές.

Τότε γιατί ένα συνηθισμένο όνομα εμφανίζεται ως μεσαίο;

Πιθανότατα επειδή περιέχει έναν χαρακτήρα που δεν περιλαμβάνεται στο αλφάβητο του κεντρικού υπολογιστή — κάτω παύλα, κενό, τόνος γραμμένος ως χαρακτήρας συμβατότητας — και αυτό είναι μεσαίου επιπέδου επειδή το όνομα δεν μπορεί να σταλεί όπως είναι. Μεσαίο επίπεδο σημαίνει «χρειάζεται έλεγχο», όχι «είναι πλαστογραφία». Το εύρημα κάτω από το επίπεδο ονομάζει τον ακριβή χαρακτήρα και τη θέση του.

Λέει η σελίδα αν ένα όνομα είναι επικίνδυνο, καταχωρισμένο ή προσβάσιμο;

Όχι, και στα τρία. Δεν αγγίζει ποτέ το δίκτυο και δεν επιλύει τίποτα, οπότε δεν μπορεί να γνωρίζει αν ένα όνομα υπάρχει ή ποιος το κατέχει, και σκόπιμα δεν λέει τίποτα για το τι κάνει ένας ιστότοπος. Απαντά σε μια στενότερη ερώτηση που μπορεί να ελεγχθεί από τον ίδιο τον αναγνώστη: από ποιους χαρακτήρες αποτελείται αυτό το όνομα, και αν αναγάγουμε τους ομοιόμορφους στα γράμματα που μιμούνται, τι γράφει;

Ένα όνομα γραμμένο στα κινέζικα και η σελίδα λέει ότι ο τομέας πρώτου επιπέδου δεν είναι ASCII. Κάτι δεν πάει καλά;

Τίποτα δεν είναι λάθος. Ένας κινεζικός τομέας πρώτου επιπέδου ταξιδεύει ως δική του ετικέτα xn--, οπότε η τελευταία ετικέτα του ονόματος γράφεται στην κωδικοποιημένη μορφή της και η σελίδα το σημειώνει. Οι σημειώσεις δεν φέρουν επίπεδο, επειδή περιγράφουν ένα γεγονός και όχι πρόβλημα.

Γιατί η γραμμή «Διαβάζεται ως» μερικές φορές δείχνει το ίδιο όνομα που πληκτρολογήθηκε;

Επειδή η σελίδα εμφανίζει αναγωγή μόνο όταν η αναγωγή αλλάζει πραγματικά κάτι. Αν κάθε χαρακτήρας στο όνομα έχει ήδη το σχήμα που μιμείται, η αναγωγή και το όνομα είναι η ίδια συμβολοσειρά και δεν υπάρχει τίποτα να αναφερθεί.

Τι είναι μια ετικέτα A και μια ετικέτα U;

Μια ετικέτα A είναι η γραφή ASCII που ταξιδεύει: xn--fiq228c. Μια ετικέτα U είναι η ίδια ετικέτα γραμμένη στο σύστημα γραφής στο οποίο ανήκει: 中文. Είναι δύο γραφές μιας ετικέτας, και η σελίδα εμφανίζει και τις δύο για κάθε ετικέτα που αποκωδικοποιεί, ώστε να φαίνεται τι κρύβει μια κωδικοποιημένη ετικέτα.