การตั้งค่า XML (.xml)
W3C มาตรฐานExtensible Markup Language (XML) คือภาษามาร์กอัปอเนกประสงค์ที่กำหนดชุดกฎสำหรับการเข้ารหัสเอกสารในรูปแบบที่ทั้งมนุษย์อ่านได้และเครื่องจักรประมวลผลได้
บีบอัด XML ออนไลน์
เป็นส่วนตัว - ไฟล์จะไม่ออกจากอุปกรณ์ของคุณ
ตรวจสอบไฟล์และข้อมูลเมตา
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ XML โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็นส่วนหัวระดับไบต์
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ 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 (ปัจจุบัน) | JSON | YAML | Protocol Buffers |
|---|---|---|---|---|
| ความเยิ่นเย้อ | สูง (มีแท็กปิดและไวยากรณ์แอตทริบิวต์) | ต่ำ (รูปแบบคีย์-ค่าแบบกระชับ) | ต่ำ (ใช้การเยื้องบรรทัด) | ต่ำมาก (การซีเรียลไลซ์แบบไบนารี) |
| การตรวจสอบสคีมา | มาตรฐาน XSD และ DTD ที่พัฒนามาอย่างสมบูรณ์ พร้อมการบังคับใช้โดยคอมไพเลอร์ | JSON Schema (ไม่บังคับ) | JSON Schema / สคีมา Yaml | ข้อกำหนดสคีมา .proto ที่เข้มงวด |
| เนมสเปซ | รองรับเนมสเปซ XML แบบเนทีฟ (xmlns) | ไม่มีกลไกเนมสเปซแบบเนทีฟ | ไม่มีกลไกเนมสเปซแบบเนทีฟ | การประกาศแพ็กเกจ |
| การแปลงข้อมูล | ไปป์ไลน์การแปลงข้อมูลแบบประกาศด้วย XSLT | โค้ดกำหนดเอง / สคริปต์ jq | โค้ดกำหนดเอง | โค้ดกำหนดเอง |
รูปแบบความเสียหายทั่วไปและคู่มือการกู้คืน Hex
XML Parsing Error: แท็กไม่ตรงกันหรือไม่ได้กำหนดเอนทิตี
สาเหตุหลัก: อักขระสงวนที่ไม่ได้หลีก (เช่น '&', '<', หรือ '>') หรือความไม่ตรงกันของตัวพิมพ์เล็กใหญ่ระหว่างแท็กเปิดและแท็กปิด
การกู้คืน: แทนที่ '&' ด้วย '&', '<' ด้วย '<', '>' ด้วย '>' หรือครอบข้อความตามต้องการภายในบล็อก '<![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)
ประวัติความเป็นมาและเหตุการณ์สำคัญ
ข้อได้เปรียบและจุดเด่นสำคัญ
- การตรวจสอบสคีมาอย่างเข้มงวดด้วย 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 เครือข่ายภายใน ส่งผลให้เซิร์ฟเวอร์อ่านและเปิดเผยข้อมูลที่เป็นความลับได้