โมดูลการเรียนรู้แบบไมโครด้าน Universal Acceptance โมดูลการเรียนรู้ที่ 6: การพัฒนาโปรแกรมที่รองรับชื่อโดเมนสากล ภายใต้แนวคิด Universal Acceptance (UA)

กฎเชิงบริบทสำหรับอักขระ (Contextual Rules for Characters)

ในมาตรฐาน IDNA2003 ไม่มีการกำหนดกฎที่เข้มงวดเกี่ยวกับตำแหน่งของเครื่องหมายขีดกลาง (hyphen) ที่อยู่ต้นหรือท้ายของ label ส่งผลให้เมื่อแปลงชื่อโดเมนลักษณะดังกล่าวเป็นรูปแบบ Punycode ระบบตามมาตรฐาน IDNA2003 จะไม่รายงานข้อผิดพลาดใด ๆ

  ในทางตรงกันข้าม มาตรฐาน IDNA2008 ได้กำหนดกฎที่เข้มงวดมากขึ้นเพื่อเสริมสร้างความมั่นคงปลอดภัย และลดความคลุมเครือรวมถึงความเสี่ยงจากการโจมตีบางรูปแบบ เช่น การโจมตีแบบ Homograph ตามข้อกำหนดของมาตรฐาน IDNA2008 ระบุว่า label ของชื่อโดเมนต้องไม่เริ่มต้นหรือสิ้นสุดด้วยเครื่องหมายขีดกลาง หาก label ใดฝ่าฝืนกฎดังกล่าว ระบบตามมาตรฐาน IDNA2008 จะรายงานข้อผิดพลาดในรูปแบบ UnicodeError เพื่อแจ้งให้ทราบถึงปัญหาที่เกิดขึ้น

ตัวอย่างที่ 8: การเปิดเผยข้อบกพร่องของ IDNA2003 ในการบังคับใช้กฎเชิงบริบทของอักขระ

from idna import encode

def demonstrate_idna2003_vs_idna2008_hyphen_handling():

    # Hyphen at the beginning of the label

       domain_name_hyphen_beginning = “-example.co.th”

     try:

           # Convert Unicode domain name to Punycode using IDNA2003

           punycode_domain_name_idna2003 =           domain_name_hyphen_beginning.encode(‘idna’).decode(‘utf-8’)

               print(“Punycode domain name (IDNA2003):”, punycode_domain_name_idna2003)

 

       except UnicodeError as e:

         print(“Error (IDNA2003):”, str(e))

     try:

             # Convert Unicode domain name to Punycode using IDNA2008

             punycode_domain_name_idna2008 = encode(domain_name_hyphen_beginning)

             print(“Punycode domain name (IDNA2008):”, punycode_domain_name_idna2008)

except UnicodeError as e:

           print(“Error (IDNA2008):”, str(e))

if __name__ == “__main__”:

       print(“Demonstrating IDNA2003 vs. IDNA2008 Hyphen Handling:”)

       demonstrate_idna2003_vs_idna2008_hyphen_handling()

ในตัวอย่างโค้ดข้างต้น ได้แสดงให้เห็นถึงความแตกต่างของพฤติกรรมการทำงานระหว่างมาตรฐาน IDNA2003 และ IDNA2008 ในการจัดการกรณีที่มีเครื่องหมายขีดกลาง (hyphen) อยู่ที่ตำแหน่งต้นของ label ในชื่อโดเมน ซึ่งความแตกต่างดังกล่าวเกิดจากการเปลี่ยนแปลงและการปรับปรุงที่ถูกนำมาใช้ในมาตรฐาน IDNA2008 ซึ่งเป็นมาตรฐานฉบับล่าสุด ในมาตรฐาน IDNA2003 ไม่มีการกำหนดกฎที่เข้มงวดเกี่ยวกับตำแหน่งของเครื่องหมายขีดกลางที่อยู่ต้นหรือท้ายของ label ส่งผลให้เมื่อแปลงชื่อโดเมนลักษณะดังกล่าวเป็นรูปแบบ Punycode ระบบตามมาตรฐาน IDNA2003 จะไม่รายงานข้อผิดพลาดใด ๆ ในทางตรงกันข้าม มาตรฐาน IDNA2008 ได้กำหนดกฎที่เข้มงวดมากขึ้นเพื่อเสริมสร้างความมั่นคงปลอดภัย และป้องกันความคลุมเครือรวมถึงความเสี่ยงจากการโจมตีบางรูปแบบ เช่น การโจมตีแบบ Homograph โดยตามข้อกำหนดของมาตรฐาน IDNA2008 ระบุว่า label ของชื่อโดเมนต้องไม่เริ่มต้นหรือสิ้นสุดด้วยเครื่องหมายขีดกลาง หาก label ใดฝ่าฝืนกฎดังกล่าว ระบบตามมาตรฐาน IDNA2008 จะรายงานข้อผิดพลาดในรูปแบบ UnicodeError เพื่อแจ้งให้ทราบถึงปัญหาที่เกิดขึ้น