Công cụ kiểm tra đồng dạng IDN

Hai tên có thể được viết bằng các ký tự khác nhau nhưng vẫn đọc giống nhau. apple.com và аpple.com — với chữ cái đầu là chữ a nhỏ Cyrillic — là hai tên khác nhau đối với mạng, và là cùng một từ đối với người đọc. Trang này tách một tên ra và cho biết nó thuộc loại nào: chia tên thành các nhãn, giải mã mọi nhãn xn-- về các ký tự nó mang, đếm số byte theo giới hạn DNS, gọi tên từng ký tự giống nhau cùng hệ chữ viết mà nó mượn, và gấp toàn bộ tên về hình dạng mà nó bắt chước. Trang báo cáo cái nó tìm thấy và cái nó không tìm thấy, ở cùng mức chi tiết, nên một kết quả sạch nghĩa là các kiểm tra đã chạy và đạt, chứ không phải là không có gì được xem xét.
Mọi xử lý diễn ra cục bộ trong trình duyệt của bạn — tên bạn gõ không bao giờ được tải lên và không bao giờ được phân giải.

Mới làm quen? Đồng dạng chữ IDN được giải thích bằng tiếng Việt đơn giản — punycode làm và không làm gì, vì sao trình duyệt đôi khi hiện xn--, và vì sao trang này là một tập hợp kiểm tra chứ không phải phán quyết.
Đọc đầu vào như: Gấp tên về NFC trước
ĐỌC THÀNH —
DẠNG DNS (những gì bộ phân giải nhận được) —
KÍCH THƯỚC —
Chưa kiểm tra gì. Gõ hoặc dán một tên miền ở trên — mỗi lần một tên — hoặc nhấn Tải ví dụ. Trang đọc một tên trần, một tên được dán từ URL, hoặc cả một URL, và cho bạn biết nó đã lấy phần nào. Mọi kiểm tra đã chạy đều được liệt kê dưới kết quả, kể cả những kiểm tra không tìm thấy gì.
Đồng dạng chữ IDN là gì?
Đồng dạng chữ (homograph) là một từ được viết theo một cách nhưng đọc theo cách khác. Trong tên miền, thủ đoạn thường chỉ cần một ký tự: apple.com gồm bảy chữ cái Latin, còn аpple.com bắt đầu bằng U+0430, chữ cái a nhỏ trong chữ Cyrillic, có hình dạng y hệt trong mọi phông chữ bạn có. Với mạng, đó là hai tên khác nhau. Với mắt bạn, đó là cùng một từ, và chỉ một trong hai là của Apple.

Tên chỉ dùng ASCII trong hai thập kỷ đầu của DNS, đó là lý do mọi thứ về chúng được đo bằng byte và chữ cái: các nhãn gồm chữ cái, chữ số và dấu gạch ngang, tối đa 63 byte mỗi nhãn và tối đa 255 byte tổng cộng. Tên miền quốc tế hóa (IDN) là kết quả khi các quy tắc được mở ra cho phần còn lại của Unicode, và punycode (RFC 3492) là quy tắc đánh vần giữ cho cơ chế cũ tiếp tục chạy: một nhãn có chứa bất kỳ thứ gì ngoài ASCII được viết thành nhãn xn--, một chuỗi ASCII mang cùng các ký tự ở dạng đã gấp. 中文.com được truyền đi là xn--fiq228c.com, và cả hai cách đánh vần đều chỉ cùng một host.

Phần quan trọng ở đây là punycode không làm gì. Nó chuyển đổi cách đánh vần và không gì khác. Nó không có ý kiến về việc liệu аpple.com có nên được phép nằm cạnh apple.com hay không, và không thể được hỏi, vì câu hỏi đó thuộc về mắt và phông chữ chứ không phải về byte. Cơ quan đăng ký quyết định nó sẽ bán ký tự nào, trình duyệt quyết định cách hiển thị một tên nó coi là an toàn, và người đọc quyết định có nhấp hay không. Trang này trả lời câu hỏi nằm dưới cả ba: tên này thực sự được cấu tạo từ những ký tự nào, và điều đó khiến nó đánh vần cái gì?

Các trường hợp mà trang này được kiểm tra với

Mỗi hàng dưới đây được trang này chạy khi tải và lại bởi nút Tự kiểm tra, và trang phải báo cáo chính xác điều hàng đó nói — cùng các phát hiện, cùng mức, cùng dạng DNS, cùng số byte, không hơn không kém. Đó là điều làm cho một kết quả sạch ở đây có giá trị: đường đi mã cho phép một tên thông thường qua chính là đường đi bắt được các thủ đoạn dưới đây.

Trường hợp là gì Mức Tên khi đến nơi Trang phải báo cáo gì

Trang này quyết định như thế nào
  1. Lấy tên ra từ những gì bạn đã dán. Một tên trần được dùng nguyên dạng; một URL có host được lấy ra và scheme, cổng, đường dẫn và query bị bỏ đi, và trang nói rõ nó đã làm điều nào trong hai điều, thay vì âm thầm phân tích dấu gạch chéo như thể nó là một phần của tên.
  2. Làm sạch theo cách một client làm. Ký tự điều khiển, các ký tự không độ rộng và dấu thứ tự byte bị bỏ đi; dấu chấm toàn chiều rộng hoặc dấu chấm ideographic được tính là dấu chấm; và dấu chấm cuối là gốc chứ không phải lỗi. Mỗi ký tự bị xóa hoặc được diễn giải lại theo cách này đều được báo cáo, vì một khoảng trắng không độ rộng bị bỏ đi âm thầm chính là thứ bạn cần được biết.
  3. Tách thành nhãn và đo từng nhãn. Một nhãn không được rỗng, không được bắt đầu hoặc kết thúc bằng dấu gạch ngang, và không được có hai dấu gạch ngang ở vị trí thứ ba và thứ tư trừ khi nó là nhãn xn--. Mỗi nhãn được đo bằng byte UTF-8 so với trần 63 byte, và toàn bộ tên so với 255.
  4. Giải mã mọi nhãn xn-- về các ký tự của nó. Nhãn đã giải mã sau đó được mã hóa lần thứ hai và so với những gì bạn gõ. Một nhãn không qua được vòng khứ hồi đó không phải là nhãn mà nó tự nhận, và một nhãn giải mã thành ký tự điều khiển hoặc thành không có gì cả sẽ được báo như vậy thay vì bị bỏ đi âm thầm.
  5. Hỏi mỗi ký tự là gì. Điểm mã của nó, các byte UTF-8 của nó, hệ chữ viết nó thuộc về, liệu nó có nằm trong một nhóm ký tự trông giống nhau hay không, và các thành viên khác của nhóm đó là gì. Đây là chỗ một chữ a Cyrillic thôi là “một chữ cái” và trở thành “một chữ cái có hình dạng như chữ Latin”.
  6. Gấp tên về hình dạng mà nó bắt chước. Mỗi ký tự giống nhau được thay bằng ký tự mà nó giống, điều này biến аpple.com thành apple.com. Cách đọc đã gấp đó là dòng hữu ích nhất trên trang, vì apple.com là thứ bạn có thể hành động theo, còn “một chữ a Cyrillic” thì không.
  7. Thu thập các phát hiện và báo cáo cái tệ nhất. Mỗi phát hiện được báo một lần, kèm các nhãn mà nó xuất hiện. Một tên chỉ trông bất thường sẽ tạo ra ghi chú chứ không phải phát hiện: trộn Hán và Kana, hay kết thúc bằng dấu chấm gốc, là cách viết bình thường chứ không phải lý do để lo lắng.

Các mức, và điều chúng khẳng định

không có không có gì ở đây đáng nêu — thấp cùng tên được viết theo cách thứ hai — trung bình một ký tự mà DNS sẽ không mang, hoặc một ký tự gấp về một chữ cái thường — cao một tên được tạo để đọc như một tên khác, hoặc một tên không thể gửi đi được.

Mức là điều tệ nhất mà các phát hiện có thể có nghĩa, không phải xác suất và không phải nhận định về trang. Một tên hoàn toàn trung thực có thể ở mức trung bình vì nó chứa một ký tự ngoài bảng chữ cái của tên host, và một tên có chủ ý xấu có thể ở mức cao chỉ với một chữ cái Cyrillic trong đó. Danh sách dưới mức cho biết lý do, mỗi phát hiện một dòng, và danh sách đó là phần đáng đọc.

Các kiểm tra nó chạy, từng cái một

Bảng dưới đây được xây từ cùng danh sách mà trang báo cáo, nên một hàng ở đây và một phát hiện trong kết quả không thể mâu thuẫn. Một kiểm tra không tìm thấy gì được liệt kê là không: điểm của bảng là bạn có thể thấy câu hỏi đã được đặt ra và trả lời, thay vì tự hỏi liệu nó có được đặt ra hay không.

Kiểm tra Tệ nhất nó có thể nghĩa là gì Nó tìm gì

Cùng danh sách đó điều khiển các ghi chú, và các ghi chú không có mức nào: một nhãn không có dấu chấm, dấu chấm gốc ở cuối, một tên miền cấp cao không phải ASCII, một dấu phân tách khác dấu chấm, một tên viết hoa, các ký tự bị xóa khi làm sạch, và một URL đã bị rút gọn về host.

Các giới hạn mà DNS áp đặt

Một tên là một danh sách các nhãn và mỗi nhãn được đếm bằng byte, không phải bằng ký tự. Sự khác biệt đó là toàn bộ lý do punycode tồn tại: 中文 là hai ký tự và sáu byte, còn dạng xn-- của nó là mười lăm ký tự, nên cách đánh vần đã mã hóa là thứ phải vừa. Trang áp dụng cả hai trần và báo cho bạn đã vướng trần nào.

Giới hạn Giá trị Điều gì xảy ra ở biên
Vì sao trình duyệt đôi khi hiện xn--

Bạn có thể đã thấy rằng một tên viết bằng tiếng Trung, hoặc bằng Cyrillic, đôi khi hiện trên thanh địa chỉ dưới dạng xn-- vô nghĩa thay vì các ký tự bạn mong đợi. Đó là trình duyệt từ chối hiển thị dạng đẹp, chứ không phải site không đăng ký được. Trình duyệt áp dụng một quy tắc riêng cho tên nó chưa từng thấy, và quy tắc đó tồn tại vì lý do mà cả trang này tồn tại: hiển thị аpple.com như аpple.com chính là thứ kẻ tấn công muốn, nên một tên hỗn hợp chữ viết lạ được hiện ở dạng đã mã hóa cho đến khi nó được thấy đủ nhiều lần để được tin cậy.

Tên xuất hiện ở đâu Những gì được hiển thị Lý do

Trang này sẽ không làm gì
Đây là một tập hợp kiểm tra, không phải phán quyết, và không phải danh sách chặn. Nó báo cáo tên được cấu tạo từ những gì; nó không biết trang làm gì. Một tên có thể qua mọi kiểm tra ở đây và vẫn là trang lừa đảo, và một tên có thể bị gắn cờ là tên hỗn hợp chữ viết và vẫn là một trang web bình thường của người viết ngôn ngữ riêng của họ. Các nhóm hình dạng là tập con được biên soạn thủ công từ các ký tự dễ nhầm trong UTS #39, nên một cặp ký tự mà trang này không biết sẽ không được báo cáo. Và không gì ở đây được phân giải, tải xuống hay tra cứu: tên bạn gõ không bao giờ rời khỏi trình duyệt, điều đó cũng có nghĩa trang không thể biết tên có tồn tại hay không.
Các quy tắc đến từ đâu

Punycode là RFC 3492, và tự kiểm tra trên trang này chạy mười một nhãn mẫu được in trong tài liệu đó như kiểm tra đầu tiên, nên bộ mã hóa ở đây được đối chiếu với các ví dụ trong tiêu chuẩn thay vì với chính nó. Các quy tắc xử lý mà một IDN đi qua là RFC 5891 với bảng ký tự của RFC 5892, và lớp tương thích mà trình duyệt thực sự áp dụng là UTS #46 với cờ không chuyển tiếp; trang này cho bạn biết các quy tắc đó làm gì thay vì giả vờ triển khai chúng, và việc gấp mà nó áp dụng — NFC rồi chữ thường, rồi RFC 3492 — là cùng một chuỗi ngắn mà client thực hiện trước khi gửi tên. Các nhóm hình dạng, dải hệ chữ viết và bảng ký tự vô hình trong họ trang này được viết thủ công cho họ trang; các tiêu chuẩn được nêu tên để bạn tự đọc, và không có văn bản nào từ chúng được sao chép ở đây.

Câu hỏi

Một tên hỗn hợp chữ viết có luôn là một cuộc tấn công không?

Không, và xử lý nó như vậy sẽ là sai theo cách quan trọng. Tiếng Nhật viết chữ Hán và Kana trong cùng một từ, và tiếng Hàn viết chữ Hán trong chữ Hangul. Điều không có giải thích thông thường là Latin trộn với Cyrillic hoặc Hy Lạp trong cùng một nhãn, vì các hệ chữ viết đó không được dùng cùng nhau trong bất kỳ ngôn ngữ nào, và trang vạch ranh giới đó thay vì gắn cờ mọi kiểu trộn. Đó là lý do các hàng tiếng Nhật và tiếng Hàn trong bảng trường hợp ở trên đều sạch.

Vậy vì sao tên của tôi lại ra mức trung bình?

Rất có thể là vì nó chứa một ký tự mà bảng chữ cái tên host không có — dấu gạch dưới, khoảng trắng, dấu thanh viết dưới dạng ký tự tương thích — và đó là mức trung bình vì tên không thể gửi đi như hiện tại. Mức trung bình nghĩa là “cần xem xét”, không phải “đây là giả mạo”. Phát hiện dưới mức nêu đúng ký tự và vị trí của nó.

Trang này có cho tôi biết một tên có nguy hiểm, đã đăng ký hay truy cập được không?

Không, cả ba. Nó không bao giờ chạm vào mạng và không phân giải gì cả, nên nó không thể biết tên có tồn tại hay ai sở hữu nó, và nó cố ý không nói gì về việc một trang làm gì. Nó trả lời một câu hỏi hẹp hơn mà bạn có thể tự kiểm tra: tên này được cấu tạo từ những ký tự nào, và nếu tôi gấp các ký tự giống nhau về các chữ cái mà chúng bắt chước, nó đánh vần cái gì?

Tên của tôi là tiếng Trung và trang nói tên miền cấp cao không phải ASCII. Có gì sai không?

Không có gì sai. Một tên miền cấp cao Trung Quốc được truyền đi như một nhãn xn-- riêng, nên nhãn cuối của tên được viết ở dạng đã mã hóa và trang ghi chú điều đó. Ghi chú không có mức vì chúng mô tả một sự kiện chứ không phải một vấn đề.

Vì sao dòng đọc thành đôi khi hiện đúng tên tôi đã gõ?

Vì trang chỉ hiển thị cách đọc đã gấp khi việc gấp thực sự thay đổi điều gì đó. Nếu mọi ký tự trong tên đã đúng là hình dạng nó bắt chước, thì cách đọc đã gấp và tên là cùng một chuỗi và không có gì để báo cho bạn.

Nhãn A và nhãn U là gì?

Nhãn A là cách đánh vần ASCII được truyền đi: xn--fiq228c. Nhãn U là cùng nhãn đó được viết bằng hệ chữ viết mà nó thuộc về: 中文. Chúng là hai cách đánh vần của một nhãn, và trang hiển thị cả hai cho mỗi nhãn nó giải mã để bạn thấy một nhãn đã mã hóa đang giấu điều gì.