Top 10 測試目標URL 與特殊字元

IDN/punycode 同形異義

兩個看起來幾乎一樣的主機名稱,可能是完全不同的網域;也可能是同一個網域的兩種寫法。分不清這兩種情況,各自的後果都不小。

肉眼分不出來punycode 才是實話

同一件事的兩種寫法:Unicode 主機名與它的 punycode 形式

寫法一(Unicode)例え.shop.example
寫法二(punycode,瀏覽器實際查詢的形式)xn--r8jz45g.shop.example(示意——精確字串依 IDNA 編碼函式庫而定,這裡只示範概念)
關係這兩個是同一個主機的兩種表示法,不是兩個網域——DNS 查詢時瀏覽器一律轉成 punycode 形式再查。

另一種情況:仿冒同形字(homograph)

真正的網域shop.example
仿冒版(用西里爾字母 о 取代拉丁字母 o)shоp.example(肉眼幾乎看不出差別)
仿冒版的 punycode(示意)xn--shp-2xa.example(示意,不保證逐字正確)
關係這兩個看起來一樣,但是完全不同的兩個網域——這才是要拒絕的那一種。

這一頁在測什麼

同一主機的兩種寫法要合併Unicode 形式與其對應的 punycode 形式,建成兩個監控會產生重複通知——兩者是同一個身分。
仿冒同形字要拒絕或警示肉眼相似但 codepoint 不同的主機名稱,是網域仿冒的標準手法;建立監控時應該能標出「這個主機名含有可疑的混合文字系統」。
判斷依據不能是視覺永遠比對 punycode/NFC 正規化後的實際字元,不能比對畫面看起來像不像。
平台必須不做的事:只憑視覺相似度判斷兩個網域是不是同一個,或反過來,把 Unicode 與其 punycode 形式當成兩個不同的目標。