← กลับไปสารานุกรมตัวอักษร
ความรู้ดิจิทัล

Unicode ที่มองไม่เห็น: ช่องว่าง ตัวเชื่อม และความเสี่ยงที่ซ่อนอยู่

อักขระที่มองไม่เห็นไม่จำเป็นต้องเป็นช่องว่าง เรียนรู้หน้าที่ของช่องว่างความกว้างศูนย์ ตัวเชื่อม ช่องว่างไม่ตัดบรรทัด และตัวควบคุมทิศทาง

กล้องจุลทรรศน์ตัวอักษร

แก้ไขตัวอย่างเพื่อดูโค้ดพอยต์ที่ประกอบเป็นสิ่งที่เห็นบนหน้าจอ

คู่ A–B แรกมี U+200B ZERO WIDTH SPACE ส่วนคู่ที่สองมี U+2060 WORD JOINER ทั้งสองดูเหมือนกัน แต่ให้คำแนะนำเรื่องการตัดบรรทัดตรงข้ามกัน

7 โค้ดพอยต์7 หน่วยที่มองเห็น
  1. U+0041
  2. U+200B
  3. U+0042
  4. U+0020
  5. U+0041
  6. U+2060
  7. U+0042

อักขระที่มองไม่เห็นไม่จำเป็นต้องเป็นอักขระว่าง มันอาจบอกขอบเขตคำ ป้องกันการตัดบรรทัด เชื่อมรูปตัวอักษร เลือกรูปแบบการแสดง หรือเปลี่ยนทิศทางของข้อความ

สตริงสองชุดที่ดูเหมือนกันทุกอย่างอาจมีคำสั่งต่างกันอยู่ภายใน

“ช่องว่าง” มีหลายหน้าที่

U+0020 SPACE คือช่องว่างบนแป้นพิมพ์ Unicode ยังมี

  • U+00A0 NO-BREAK SPACE มีความกว้างแต่ป้องกันการตัดบรรทัด
  • U+2009 THIN SPACE ให้ระยะห่างแคบกว่า
  • U+3000 IDEOGRAPHIC SPACE กินพื้นที่หนึ่งช่องเต็มความกว้างแบบเอเชียตะวันออก
  • U+2800 BRAILLE PATTERN BLANK เป็นอักขระเบรลล์ที่ไม่มีจุด ไม่ใช่ช่องว่างทั่วไป

ทั้งหมดอาจดูว่าง แต่ความกว้าง การตัดบรรทัด ความหมาย และการเข้าถึงต่างกัน การใช้ตัวหนึ่งแทนอีกตัวเพียงเพราะ “ดูว่าง” ทำให้เลย์เอาต์คาดเดาไม่ได้

ความกว้างศูนย์ก็ยังเป็นคำสั่ง

  • U+200B ZERO WIDTH SPACE เปิดตำแหน่งให้ตัดบรรทัดโดยไม่มีช่องที่มองเห็น
  • U+2060 WORD JOINER ป้องกันการตัดโดยไม่เพิ่มความกว้าง
  • U+200C ZERO WIDTH NON-JOINER ป้องกันการเชื่อมหรือตัวควบ
  • U+200D ZERO WIDTH JOINER ช่วยการเชื่อมและเชื่อมลำดับอีโมจิ
  • U+FE0E/U+FE0F ขอการแสดงแบบข้อความหรืออีโมจิ

การเรียกทั้งหมดว่า “ช่องว่างล่องหน” ทำให้หน้าที่ที่ต่างกันหายไป หลายตัวไม่ใช่ช่องว่างด้วยซ้ำ ในอักษรที่เปลี่ยนรูปตามบริบท ตัวเชื่อมและไม่เชื่อมอาจเป็นส่วนหนึ่งของการสะกดที่ถูกต้อง การลบโดยไม่แยกแยะจึงเปลี่ยนรูปหรือความหมายของคำได้

ตัวควบคุมทิศทางแก้ปัญหาหลายภาษาจริง

อักษรอาหรับและฮีบรูส่วนใหญ่ไหลจากขวาไปซ้าย ส่วนอักษรละตินและตัวเลขไหลจากซ้ายไปขวา อัลกอริทึมสองทิศทางของ Unicode จัดการข้อความผสม โดยใช้เครื่องหมายทิศทาง การแยก การฝัง และการเขียนทับช่วยกรณีกำกวม

นี่เป็นโครงสร้างสำคัญของข้อความหลายภาษา แต่ลำดับที่เก็บกับลำดับที่เห็นอาจต่างกัน หากจัดการไม่ดี หน้าจออาจดูเหมือนสื่อสิ่งอื่นจากสิ่งที่โปรแกรมประมวลผล โปรแกรมแก้โค้ดและเครื่องมือความปลอดภัยจึงเตือนตัวควบคุมทิศทางที่ผิดปกติ

ทำไมข้อความที่คัดลอกมาจึงแกะรอยยาก

อักขระล่องหนอาจมาจากเอกสารหรือเว็บที่จัดรูปแบบ ระบบป้อนภาษา การตัดคำอัตโนมัติ ลำดับอีโมจิ หรือการสร้างชื่อว่าง

อาการได้แก่ค้นหาไม่พบ ชื่อผู้ใช้ที่ดูซ้ำ URL ที่เปรียบเทียบไม่เท่ากัน การตัดบรรทัดแปลก และเคอร์เซอร์เหมือนติดขัด วิธีตรวจที่ถูกต้องคือดูโค้ดพอยต์ ไม่ใช่กด Backspace ไปเรื่อย ๆ

อักขระซ่อนและตัวคล้ายเกี่ยวข้องกับความปลอดภัย

Unicode รองรับระบบเขียนทั่วโลก อักขระต่างกันจึงอาจมีรูปคล้ายกัน a ละตินกับ а ซีริลลิกไม่ใช่อักขระเดียวกัน แม้ฟอนต์จะวาดเกือบเหมือน

Unicode Technical Standard #39 กำหนดกลไกตรวจตัวระบุที่ชวนสับสน จุดประสงค์คือค้นหาความเสี่ยง ไม่ใช่บังคับทุกภาษาให้เป็น ASCII การผสมอักษรในชื่อสากลอาจถูกต้อง แต่ถ้าอยู่ในโดเมนเลียนแบบธนาคารก็ต้องระวัง

งานวิจัยการโจมตีระบบภาษาแบบมองไม่เห็นยังพบว่าการแทรกอักขระล่องหน ตัวเหมือน การสลับลำดับ และตัวควบคุมลบสามารถเปลี่ยนผลลัพธ์โดยแทบไม่เปลี่ยนภาพ

การใช้ที่ปลอดภัยและเสี่ยง

การทดสอบเรนเดอร์ วิเคราะห์เอกสาร จัดการการตัดบรรทัด และใช้ตัวเชื่อมในอักษรที่ต้องการเป็นการใช้ที่สมเหตุผล ส่วนการปลอมลิงก์หรือบัญชี หลบการตรวจ ใส่ตัวควบคุมในซอร์สโค้ด และสร้างตัวตนว่างขัดกฎเป็นการใช้เสี่ยง

ผลิตภัณฑ์ควรเตือนตัวควบคุมที่ไม่คาดคิด เปรียบเทียบรูป normalization และตัวคล้ายเมื่อเหมาะสม รักษาข้อความหลายภาษาที่ถูกต้อง และแสดงโค้ดพอยต์ในเครื่องมือวินิจฉัย

มองไม่เห็นไม่ได้แปลว่าไร้ความหมาย การไม่มีรูปอักขระอาจเป็นคำสั่งในตัวเอง

เครื่องมืออักขระว่างระบุหน้าที่ของแต่ละอักขระ ใช้เพื่อทดสอบและจัดหน้าอย่างสุจริต ไม่ใช่เพื่อปลอมข้อความหรือเลี่ยงกฎ

แหล่งข้อมูลและอ่านเพิ่มเติม

  1. มาตรฐาน
  2. มาตรฐาน
  3. มาตรฐาน
  4. บทความวิจัย
    Bad Characters: Imperceptible NLP Attacks

    Nicholas Boucher, Ilia Shumailov, Ross Anderson, and Nicolas Papernot 2022 IEEE Symposium on Security and Privacy 2022 DOI 10.1109/SP46214.2022.9833641

ความคิดเห็น

กำลังโหลดความคิดเห็น…