กฎเชิงบริบทสำหรับอักขระ (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 เพื่อแจ้งให้ทราบถึงปัญหาที่เกิดขึ้น
