การตั้งค่า XML (.xml)

W3C มาตรฐาน

Extensible Markup Language (XML) คือภาษามาร์กอัปอเนกประสงค์ที่กำหนดชุดกฎสำหรับการเข้ารหัสเอกสารในรูปแบบที่ทั้งมนุษย์อ่านได้และเครื่องจักรประมวลผลได้

บีบอัด XML ออนไลน์

เป็นส่วนตัว - ไฟล์จะไม่ออกจากอุปกรณ์ของคุณ

ตรวจสอบไฟล์และข้อมูลเมตา

ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ XML โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:

เลือกหรือวางไฟล์ที่นี่

เป็นส่วนตัว - ไฟล์จะไม่ออกจากอุปกรณ์ของคุณ

หรือวาง Ctrl+V
รับประกันความเป็นส่วนตัวโดยไม่มีการส่งข้อมูลผ่านเครือข่าย: อัปโหลด 0 ไบต์ไปยังเซิร์ฟเวอร์ภายนอก การประมวลผลทั้งหมดเกิดขึ้นภายในแซนด์บ็อกซ์ของเบราว์เซอร์ของคุณ

ลายเซ็นส่วนหัวระดับไบต์

ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ XML โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:

ลายเซ็น HEX (OFFSET 0):

3C 3F 78 6D

การแสดงผลรูปแบบ ASCII: <?xm

มาตรฐาน: W3C Recommendation (XML 1.0 Fifth Edition)

ข้อมูลจำเพาะทางเทคนิค

สถาปัตยกรรมคอนเทนเนอร์ภาษามาร์กอัปข้อความเชิงลำดับชั้นพร้อมแท็กและแอตทริบิวต์เชิงความหมายแบบกำหนดเอง
การบีบอัดGzip / Deflate บีบอัดข้อมูลส่วนแท็กปิดที่ซ้ำและยาวได้ 85% - 92%
การจัดลำดับไบต์สตรีมอักขระ UTF-8 / UTF-16 ซึ่งกำหนดโดยแอตทริบิวต์ encoding ในคำประกาศ XML
พื้นที่สีไม่เกี่ยวข้อง
ช่องสัญญาณและโครงสร้างอิลิเมนต์ (<tag>), แอตทริบิวต์ (attr="val"), บล็อก CDATA และคำสั่งประมวลผล
ขนาดสูงสุดโครงสร้างต้นไม้เชิงลำดับชั้นที่ไม่จำกัดขนาด
ความโปร่งใสไม่เกี่ยวข้อง
การสตรีมและแบบโปรเกรสซีฟตัวแยกวิเคราะห์ SAX (Simple API for XML) และ StAX ช่วยให้อ่านสตรีมได้โดยใช้หน่วยความจำอย่างประหยัด

ตารางเปรียบเทียบทางเทคนิค: XML กับคู่แข่ง

คุณลักษณะทางเทคนิคXML (ปัจจุบัน)JSONYAMLProtocol Buffers
ความเยิ่นเย้อสูง (มีแท็กปิดและไวยากรณ์แอตทริบิวต์)ต่ำ (รูปแบบคีย์-ค่าแบบกระชับ)ต่ำ (ใช้การเยื้องบรรทัด)ต่ำมาก (การซีเรียลไลซ์แบบไบนารี)
การตรวจสอบสคีมามาตรฐาน XSD และ DTD ที่พัฒนามาอย่างสมบูรณ์ พร้อมการบังคับใช้โดยคอมไพเลอร์JSON Schema (ไม่บังคับ)JSON Schema / สคีมา Yamlข้อกำหนดสคีมา .proto ที่เข้มงวด
เนมสเปซรองรับเนมสเปซ XML แบบเนทีฟ (xmlns)ไม่มีกลไกเนมสเปซแบบเนทีฟไม่มีกลไกเนมสเปซแบบเนทีฟการประกาศแพ็กเกจ
การแปลงข้อมูลไปป์ไลน์การแปลงข้อมูลแบบประกาศด้วย XSLTโค้ดกำหนดเอง / สคริปต์ jqโค้ดกำหนดเองโค้ดกำหนดเอง

รูปแบบความเสียหายทั่วไปและคู่มือการกู้คืน Hex

XML Parsing Error: แท็กไม่ตรงกันหรือไม่ได้กำหนดเอนทิตี

สาเหตุหลัก: อักขระสงวนที่ไม่ได้หลีก (เช่น '&', '<', หรือ '>') หรือความไม่ตรงกันของตัวพิมพ์เล็กใหญ่ระหว่างแท็กเปิดและแท็กปิด

การกู้คืน: แทนที่ '&' ด้วย '&amp;', '<' ด้วย '&lt;', '>' ด้วย '&gt;' หรือครอบข้อความตามต้องการภายในบล็อก '<![CDATA[ ... ]]>'

การวิเคราะห์ความปลอดภัยและเวกเตอร์การโจมตีตัวแยกวิเคราะห์

ตัวแยกวิเคราะห์ XML เป็นหนึ่งในส่วนประกอบของระบบคอมพิวเตอร์ระดับองค์กรที่ถูกโจมตีมากที่สุดมาโดยตลอด เนื่องจากความสามารถอันทรงพลังในการประมวลผล DTD และขยายเอนทิตี

เวกเตอร์การโจมตีที่ทราบ

  • XML External Entity (XXE): DOCTYPE ที่เป็นอันตรายซึ่งอ้างอิงไฟล์ในเครื่องเซิร์ฟเวอร์ ('file:///etc/passwd') หรือปลายทางในเครือข่ายภายใน
  • Billion Laughs Attack (XML Bomb): การประกาศเอนทิตีซ้อนกันที่ขยายตัวแบบทวีคูณในหน่วยความจำเพื่อทำให้เกิดการปฏิเสธการให้บริการ
  • XPath Injection: ข้อมูลป้อนเข้าของผู้ใช้ที่ไม่ได้ผ่านการตรวจสอบและทำความสะอาด ช่วยให้สามารถคิวรีฐานข้อมูล XML ได้โดยไม่ได้รับอนุญาต

แนวทางปฏิบัติที่ดีที่สุดในการป้องกัน: ปิดการค้นหา DTD ภายนอกและการประมวลผลเอนทิตีภายนอกในตัวแยกวิเคราะห์ XML เสมอ (ตั้งค่าคุณสมบัติ 'disallow-doctype-decl' เป็น true)

ประวัติความเป็นมาและเหตุการณ์สำคัญ

2008W3C เผยแพร่ XML 1.0 ฉบับพิมพ์ครั้งที่ 5 (Fifth Edition) ซึ่งกำหนดมาตรฐานการรองรับอักขระสากลสมัยใหม่
2000W3C เผยแพร่ XML Schema 1.0 (XSD) และ DOM Level 2 ซึ่งวางรากฐานสำหรับการกำหนดชนิดข้อมูลแบบมีโครงสร้างและสถาปัตยกรรมแบบขับเคลื่อนด้วยเหตุการณ์
1998W3C เผยแพร่ข้อแนะนำ XML 1.0 โดยกำหนดให้เป็นชุดย่อยของ SGML ที่เรียบง่ายและเหมาะกับเว็บ

ข้อได้เปรียบและจุดเด่นสำคัญ

  • การตรวจสอบสคีมาอย่างเข้มงวดด้วย XSD (XML Schema Definition) หรือ DTD ช่วยให้มั่นใจในความถูกต้องครบถ้วนของข้อมูล
  • เนมสเปซ (xmlns) ช่วยป้องกันชื่ออิลิเมนต์ซ้ำกันในเอกสารซับซ้อนที่รวบรวมข้อมูลจากหลายแหล่ง
  • ชุดเครื่องมืออันทรงพลังสำหรับคิวรีและแปลงข้อมูล (XPath, XSLT, XQuery)

ข้อจำกัดทางเทคนิคและข้อควรพิจารณา

  • มีความเยิ่นเย้อสูงมาก: แท็กปิดทำให้ชื่ออิลิเมนต์ซ้ำ ส่งผลให้ไฟล์มีขนาดใหญ่และใช้แบนด์วิดท์มาก
  • การแยกวิเคราะห์แบบ DOM สร้างต้นไม้ออบเจกต์ขนาดใหญ่ที่ใช้หน่วยความจำมาก
  • เสี่ยงต่อช่องโหว่ด้านความปลอดภัยแบบ XML External Entity (XXE) และการขยายเอนทิตี

เกร็ดความรู้ทางเทคนิคที่น่าสนใจ

  • XML เป็นชุดย่อยที่ลดทอนความซับซ้อนของ SGML (Standard Generalized Markup Language) ซึ่งออกแบบมาให้ทำงานได้อย่างราบรื่นบนเวิลด์ไวด์เว็บ
  • เอกสารสำนักงานสมัยใหม่ (.docx, .xlsx), ภาพเวกเตอร์ (.svg) และฟีด RSS ล้วนเป็นรูปแบบย่อยของ XML ทั้งสิ้น
  • การโจมตีแบบปฏิเสธการให้บริการ 'Billion Laughs' อันโด่งดังใช้เอนทิตี XML ซ้อนกันเพียง 1 กิโลไบต์ (lol1 อ้างอิงถึง lol0 สิบตัว ไปจนถึง lol9) เพื่อขยายข้อมูลแบบทวีคูณจนใช้หน่วยความจำ 3 จิกะไบต์เมื่อแยกวิเคราะห์

คำถามทางเทคนิคที่พบบ่อย

ความแตกต่างระหว่าง XML ที่มีโครงสร้างถูกต้อง (Well-formed) กับ XML ที่ถูกต้องตามกฎ (Valid) คืออะไร?

XML ที่มีโครงสร้างถูกต้อง (Well-formed) จะปฏิบัติตามกฎไวยากรณ์พื้นฐาน (แท็กตรงกัน, มีเครื่องหมายคำพูดรอบแอตทริบิวต์, มีอิลิเมนต์รากเดี่ยว) ส่วน XML ที่ถูกต้องตามกฎ (Valid) จะต้องมีโครงสร้างถูกต้อง และสอดคล้องอย่างเคร่งครัดกับคำจำกัดความสคีมาภายนอก (XSD หรือ DTD)

เหตุใด JSON จึงเข้ามาแทนที่ XML สำหรับเว็บ API ส่วนใหญ่?

JSON แมปเข้ากับโครงสร้างข้อมูลดั้งเดิมของ JavaScript และภาษาโปรแกรมอื่นๆ ได้โดยตรง (แฮชแมปและอาร์เรย์) โดยมีโค้ดส่วนเกินน้อยกว่ามาก การแยกวิเคราะห์เร็วกว่า และมีขนาดเพย์โหลดเครือข่ายที่เล็กกว่า

ช่องโหว่ XML External Entity (XXE) คืออะไร?

ช่องโหว่ XXE เกิดขึ้นเมื่อตัวแยกวิเคราะห์ XML ประมวลผลเอกสารที่ไม่น่าเชื่อถือซึ่งเปิดใช้งานคำจำกัดความประเภทเอกสารภายนอก (DTD) ผู้โจมตีสามารถกำหนดเอนทิตีที่ชี้ไปยังไฟล์เซิร์ฟเวอร์ภายในเครื่อง (เช่น ค่าคอนฟิกูเรชันระบบ) หรือ URL เครือข่ายภายใน ส่งผลให้เซิร์ฟเวอร์อ่านและเปิดเผยข้อมูลที่เป็นความลับได้