Конфігурація XML (.xml)
Рекомендація СтандартРозширювана мова розмітки (XML): це універсальна мова розмітки, яка визначає набір правил для кодування документів у форматі, зручному для читання як людиною, так і машиною.
Стиснути XML онлайн
Приватно - файли ніколи не залишають ваш пристрій
Аналіз та метадані
Операційні системи та аналізатори файлів ідентифікують файли XML, перевіряючи початкову послідовність бінарних байтів:
Сигнатура заголовка на байтовому рівні (Magic Bytes)
Операційні системи та аналізатори файлів ідентифікують файли XML, перевіряючи початкову послідовність бінарних байтів:
ШІСТНАДЦЯТКОВА СИГНАТУРА (ЗСУВ 0):
3C 3F 78 6DПОДАННЯ В ASCII: <?xm
Стандартизація: Рекомендація W3C (XML 1.0, п'яте видання)
Технічні характеристики
| Архітектура контейнера | Ієрархічна мова текстової розмітки з власними семантичними тегами та атрибутами |
| Стиснення | Gzip / Deflate стискають громіздкі закривні теги на 85-92 %. |
| Порядок байтів (Endianness) | Потік символів UTF-8 / UTF-16, що визначається атрибутом кодування в оголошенні 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 | Власний код | Власний код |
Типові режими пошкодження та посібник з відновлення в шістнадцятковому форматі
Помилка аналізу XML: тег не збігається або сутність не визначена.
Першопричина: Неекрановані зарезервовані символи (наприклад, «&», «<» або «>») або невідповідність регістру між початковим і кінцевим тегами.
Відновлення: Замініть «&» на «&», «<» на «<», «>» на «>» або помістіть довільний текст у блоки «<![CDATA[ ... ]]>».
Аналіз безпеки та векторів атак на парсери
Парсери XML історично були одними з компонентів, які найчастіше атакували в корпоративному ІТ-середовищі, через потужні можливості DTD і розгортання сутностей.
Відомі вектори атак
- Зовнішня сутність XML (XXE): шкідливий DOCTYPE, що посилається на файли локального сервера («file:///etc/passwd») або внутрішні мережеві кінцеві точки.
- Атака Billion Laughs (XML-бомба): вкладені оголошення сутностей експоненціально розширюються в пам'яті, спричиняючи відмову в обслуговуванні.
- Ін'єкція XPath: Неочищені вхідні дані користувача, що дозволяють несанкціоноване виконання запитів до баз даних XML.
Рекомендації щодо захисту: Завжди вимикайте пошук зовнішніх DTD та обробку зовнішніх сутностей у парсерах XML (параметру disallow-doctype-decl задайте значення true).
Історичне походження та віхи
Основні переваги
- Сувора перевірка схем за допомогою XSD (XML Schema Definition) або DTD гарантує високу цілісність даних.
- Простори імен (xmlns) запобігають зіткненню імен елементів у складних документах із багатьох джерел.
- Потужні інструменти для запитів і трансформацій (XPath, XSLT, XQuery).
Технічні обмеження та недоліки
- XML надмірно багатослівний: закривні теги повторюють назви елементів, збільшуючи розмір файлів і потребу в пропускній здатності мережі.
- Аналіз DOM будує великі дерева об'єктів, що інтенсивно використовують пам'ять.
- Схильність до вразливостей безпеки, пов'язаних із зовнішніми сутностями XML (XXE) та розширенням сутностей.
Цікаві технічні факти
- XML є спрощеною підмножиною SGML (Standard Generalized Markup Language), створеною для безперешкодної роботи у Всесвітній павутині.
- Сучасні офісні документи (.docx, .xlsx), векторні зображення (.svg) та стрічки RSS є спеціалізованими діалектами XML.
- Класична атака типу «відмова в обслуговуванні» «Billion Laughs» використовує лише 1 кілобайт вкладених XML-сутностей (lol1, що посилається на десять lol0, і так до lol9), які під час синтаксичного аналізу експоненціально розгортаються до 3 гігабайтів пам'яті.
Поширені технічні запитання
У чому різниця між добре сформованим і дійсним XML?
«Добре сформований» XML дотримується базових правил синтаксису (парні теги, лапки навколо атрибутів, єдиний кореневий елемент). «Валідний» XML є добре сформованим І суворо відповідає визначенню зовнішньої схеми (XSD або DTD).
Чому JSON замінив XML для більшості веб-API?
JSON безпосередньо відповідає структурам даних JavaScript та інших мов програмування (хеш-таблицям і масивам) і потребує значно менше шаблонного коду, швидше розбирається та передає менші обсяги даних.
Що таке вразливість зовнішньої сутності XML (XXE)?
Вразливість XXE виникає, коли аналізатор XML обробляє неперевірений документ із активованим зовнішнім визначенням типу документа (DTD). Зловмисники можуть визначати сутності, які вказують на локальні файли сервера (наприклад, конфігурації системи) або внутрішні URL-адреси мережі, змушуючи сервер читати та розголошувати конфіденційні дані.