XML 設定 (.xml)
W3C 標準可延伸標記語言(XML)是一種多用途的標記語言,它定義了一套規則,可用於將文件編碼為人類與機器皆可讀取的格式。
線上壓縮 XML
具隱私保障 - 檔案絕不會離開您的裝置
檢查與中繼資料
作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 XML 檔案:
位元組層級標頭簽章(檔案簽章)
作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 XML 檔案:
十六進位簽章(偏移量 0):
3C 3F 78 6DASCII 表示法: <?xm
標準化: W3C 推薦標準(XML 1.0 第五版)
技術規格
| 容器架構 | 具有自訂語意標籤與屬性的階層式文字標記語言 |
| 壓縮 | Gzip / Deflate 可將冗長結尾標籤的資料壓縮 85% 至 92%。 |
| 位元組序 | 由 XML 宣告編碼屬性決定的 UTF-8 / UTF-16 字元串流 |
| 色彩空間 | 不適用 |
| 色版與結構 | 元素(<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 指令碼 | 自訂程式碼 | 自訂程式碼 |
常見損壞模式與十六進位修復指南
XML 解析錯誤:標籤不符或未定義實體。
根本原因: 未跳脫的保留字元(如「&」、「<」或「>」)或開頭與結尾標籤大小寫不符。
修復: 將「&」替換為「&」、「<」替換為「<」、「>」替換為「>」,或將任意文字包裝在 CDATA 區段中。
安全性分析與解析器攻擊向量
由於具備強大的 DTD 與實體擴充功能,XML 解析器在歷史上一直是企業運算中最常遭受攻擊的元件之一。
已知攻擊向量
- XML 外部實體(XXE):惡意的 DOCTYPE 參照本機伺服器檔案(「file:///etc/passwd」)或內部網路端點。
- 億萬笑聲攻擊(XML 炸彈,Billion Laughs Attack):巢狀實體宣告在記憶體中以指數級擴充,導致阻斷服務。
- XPath 資料隱碼攻擊:未經清理的使用者輸入允許對 XML 資料庫進行未授權的查詢。
防禦最佳實務: 務必在 XML 解析器中停用外部 DTD 解析與外部實體處理(以 setFeature 將「disallow-doctype-decl」設為 true)。
歷史起源與里程碑
2008W3C 發布 XML 1.0 第五版,將現代國際字元支援標準化。
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 外部實體(XXE)與實體擴充安全性漏洞的攻擊。
有趣的技術冷知識
- XML 是 SGML(Standard Generalized Markup Language)的簡化子集,旨在全球資訊網上無縫運作。
- 現代辦公室文件(.docx、.xlsx)、向量圖(.svg)與 RSS 訂閱摘要全都是專門的 XML 方言。
- 經典的「億萬笑聲」(Billion Laughs)阻斷服務攻擊僅使用 1 KB 的巢狀 XML 實體(lol1 參照十個 lol0,最多到 lol9),在解析時就會呈指數級擴充成 3 GB 的記憶體。
常見技術問題
格式良好(well-formed)與有效(valid)的 XML 有什麼區別?
「格式良好」的 XML 遵循基本的語法規則(相符的標籤、屬性周圍的引號、單一根元素)。「有效」的 XML 不僅格式良好,且嚴格遵守外部綱要定義(XSD 或 DTD)。
為什麼 JSON 會取代 XML 用於大多數的網路 API?
JSON 直接對應至原生 JavaScript 與程式語言資料結構(雜湊對應與陣列),且具有更少的範本程式碼、更快的解析速度以及更小的網路酬載。
什麼是 XML 外部實體(XXE)弱點?
當 XML 解析器處理啟用了外部文件類型定義(DTD)且不受信任的文件時,就會發生 XXE 弱點。攻擊者可以定義指向本機伺服器檔案(例如系統設定)或內部網路 URL 的實體,導致伺服器讀取並洩露機密資料。