URL และ Punycode

Short Domain Name

บริษัทยักษ์ใหญ่ทั้งหลายเช่น Google, Twitter, Amazon, Facebook ล้วนแต่มี URL พิเศษที่สั้นมากๆ เช่น

  • m.me คือ URL สั้นของ Messenger.com ของ Facebook
  • a.co คือ URL สั้นของ Amazon.com
  • g.co คือ URL สั้นสำหรับ service หลายๆตัวของ Google
  • t.co คือ URL สั้นของ Twitter
  • w.org คือ URL สั้นของ WordPress.org
  • t.me คือ URL สั้นของ Telegram
  • v.me คือ URL สั้นของ Visa

URL เหล่านี้ทำให้การเข้าถึงเว็บของบริษัทยักษ์ใหญ่ทั้งหลายจดจำและเข้าถึงได้ง่ายขึ้น

Domain Name ยังสามารถสั้นกว่านั้นได้อีก ถ้าองค์กรหรือบริษัทไหนที่เป็นเจ้าของ TLD (Top Level Domain) เช่น Verisign ที่ดูแล TLD .com อยู่ ก็สามารถใช้ Domain name “com” ได้ คือ http://com (แต่ Verisign ไม่ได้ใช้)

เท่าที่ไล่ดู มี TLD ตัวเดียวที่มีเว็บรองรับคือ .ai ซึ่งถ้าเข้าที่ http://ai ก็จะเป็นเว็บของ Offshore Information Services ซึ่งเป็นคนดูแล domain .ai อยู่ ซึ่งโดเมน .ai นี้เป็นของประเทศ Anguilla ซึ่งเป็นประเทศอาณานิคมของอังกฤษ อยู่ในหมู่เกาะคาลิบเบียน

ทีนี้ผมก็อยากลองมี URL สั้นๆกับเค้าบ้าง แต่การจะจด Domain สั้นระดับตัวเดียวในเวลานี้แทบเป็นไปไม่ได้ ยกเว้นเป็นบริษัทยักษ์ใหญ่ที่ต้องสู้ราคาแบบไม่อั้น ก็เลยลองจด URL สั้นที่เป็นอักษรตัวเดียวแต่เป็นภาษาไทยดู

การใช้ชื่อ Domain ที่เป็นอักขระพิเศษต้องใช้รหัส Punycode ครับ เช่น โดเมนที่ผมจดคือ จ.cc จะแปลงเป็น Punycode xn--82c.cc

เมื่อเราใส่ URL ที่มีอักขระพิเศษที่ลงใน Browser เช่น https://จ.cc ตัว browser ก็จะแปลงไปเป็น Punycode https://xn--82c.cc แล้วจึงไป lookup ที่ DNS เพื่อเข้าสู่เว็บต่อไป

Punycode

ทีนี้มาดูกันครับว่า Punycode ทำงานอย่างไร ชื่อโดเมนนั้น Global DNS System กำหนดให้ใช้ตัวอักษรภาษาอังกฤษและตัวเลข โดยสามารถมีเครื่องหมาย – แทรกได้ (- ไม่สามารถอยู่ต้นหรือท้ายชื่อโดเมนได้) เรียกกลุ่มอักษรนี้สั้นๆว่า LDH (Letter-Digit-Hyphen) อักขระนอกเหนือจากนั้นจะใช้เป็นชื่อโดเมนไม่ได้

ในขณะที่ภาษาต่างๆรวมทั้งภาษาไทย เราใช้มาตรฐาน Unicode ซึ่งใช้เลข 32 bits เป็นรหัสตัวอักษรภาษาต่างๆ ทำให้สามารถมีรหัสสำหรับอักษรได้มากถึง 2,147,483,647 ตัว

Punycode เป็นวิธีการแปลงชื่อที่เป็น Unicode ให้เป็นอักษรในกลุ่ม LDH โดยกระบวนการ encode ค่อนข้างวุ่นวาย ใครสนใจจริงๆไปอ่านเพิ่มได้ที่นี่ครับ Punycode – Wikipedia โดยรายละเอียดทางเทคนิคอยู่ใน RFC-3492

Punycode กับ Hacker

ในวงการความปลอดภัยทางไซเบอร์ มีการโจมติชนิดหนึ่งที่เรียกว่า Ponycode Attack คือในการทำ Phishing จะพยายามสร้างโดเมนให้ใกล้เคียงกับเป้าหมายที่สุด Hacker ก็เลือกใช้ Domain ที่เป็นอักขระภาษาอื่น แต่ดูแล้วใกล้เคียงกับชื่อโดเมนเป้าหมาย แล้วจดโดเมนในแบบ Ponycode ทำให้เหยื่อตายใจคิดว่าเป็นเว็บจริง

ดังนั้นจึงมีการกำหนดให้มีอักษรนำในโดเมนที่เป็น Ponycode ครับ เรียกว่า ASCII compatible encoding prefix ซึ่งก็คือ xn-- ที่เราเห็นในโดเมนที่เป็น Ponycode นั่นเอง เพื่อให้ user รู้ว่าชื่อหลังจาก xn-- เป็นอักขระที่เป็น Ponycode แปลงมา จะได้ไม่หลงกล

ปัญหาคือ Browser ส่วนใหญ่ไม่แสดง xn-- ให้เห็น ดังนั้นจึงเกิดกรณีตัวอย่างขึ้น Xudong Zheng ได้ทดลองจดโดเมน xn--80ak6aa92e.com ซึ่งทำให้ Browser แสดงเป็น Apple.com ได้แบบเนียนๆ ตามไปอ่านบทความของ Zheng ได้ที่นี่ครับ Phishing with Unicode Domains – Xudong Zheng

เล่าเรื่องนี้พอหอมปากหอมคอนะครับ เดี๋ยวใครมีไอเดียบรรเจิดจะติดคุกเอา….

https://จ.cc

ผมลองจดโดเมนอักษรตัวเดียวสำหรับเว็บนี้คือ https://จ.cc ครับ เผื่อจะดูเท่เหมือนบริษัทยักษ์ใหญ่ดูบ้าง… ลองเข้าดูนะครับ ถ้ามีปัญหาช่วยแจ้งด้วยก็ดีจะได้ดูว่าการใช้ Punycode จะเกิดปัญหายังไงบ้าง

การจด domain ก็จดดื้อๆเป็นชื่อ จ.cc เลย แล้วก็ตั้ง DNS A record เป็น จ.cc และ CNAME เป็น xn--82c.cc เท่าที่ลองมาก็ทำงานได้เรียบร้อยดีครับ