XML конфиг (.xml)
Препоръка СтандартРазширяемият език за маркиране (XML) е универсален език за маркиране, който дефинира набор от правила за кодиране на документи във формат, който е четим както за хора, така и за машини.
Компресирайте XML онлайн
Поверително - файловете никога не напускат устройството ви
Проверка и метаданни
Операционните системи и файловите анализатори идентифицират XML файлове чрез проверка на началната двоична байтова последователност:
Байтов подпис на заглавката (сигнатурни байтове)
Операционните системи и файловите анализатори идентифицират XML файлове чрез проверка на началната двоична байтова последователност:
HEX ПОДПИС (ОФСЕТ 0):
3C 3F 78 6DASCII ПРЕДСТАВЯНЕ: <?xm
Стандартизация: Препоръка на W3C (XML 1.0, пето издание)
Технически спецификации
| Контейнерна архитектура | Йерархичен текстов език за маркиране с персонализирани семантични тагове и атрибути |
| Компресия | Gzip / Deflate постига 85%-92% компресия на повтарящи се затварящи тагове |
| Поредност на байтовете (Endianness) | UTF-8 / UTF-16 текстов поток, определен от атрибута за кодиране в XML декларацията |
| Цветови пространства | Неприложимо |
| Канали и структура | Елементи (<tag>), атрибути (attr="val"), CDATA блокове, инструкции за обработка |
| Максимални размери | Неограничена йерархична дървовидна структура |
| Прозрачност | Неприложимо |
| Поточно предаване и прогресивно зареждане | SAX (Опростен API за XML) и StAX парсери позволяват ефективно четене на потоци с ниска консумация на памет |
Техническа сравнителна матрица: XML спрямо конкуренти
| Технически атрибут | XML (Текущ) | JSON | YAML | Protocol Buffers |
|---|---|---|---|---|
| Многословност | Висока (затварящи тагове и синтаксис на атрибути) | Ниска (компактен формат ключ-стойност) | Ниска (с отстъпи) | Изключително ниска (бинарна сериализация) |
| Валидация на схема | Зрели XSD и DTD стандарти с проверка от компилатора | JSON схема (по избор) | JSON схема / YAML схеми | Стриктни .proto дефиниции на схеми |
| Пространства от имена | Поддръжка на нативни XML пространства от имена (xmlns) | Няма нативен механизъм за пространства от имена | Няма нативен механизъм за пространства от имена | Декларации на пакети |
| Трансформации | XSLT декларативни трансформационни конвейери | Потребителски код / jq скриптове | Потребителски код | Потребителски код |
Често срещани видове повреди и ръководство за възстановяване на шестнадесетични данни
Грешка при XML парсиране: несъответстващ таг или недефинирана същност.
Първопричина: Неескейпнати запазени символи (като '&', '<' или '>') или несъответствие в малките/главните букви между отварящите и затварящите тагове.
Възстановяване: Заменете '&' с '&', '<' с '<', '>' с '>' или обвийте произволен текст в '<![CDATA[ ... ]]>'' блок.
Анализ на сигурността и вектори на атака към парсера
XML парсерите исторически са били едни от най-атакуваните компоненти в корпоративните изчисления поради мощните възможности за DTD и разширяване на същности.
Известни вектори на атака
- XML външна същност (XXE): Злонамерен DOCTYPE, сочещ към локални файлове на сървъра ('file:///etc/passwd') или вътрешни мрежови крайни точки.
- Атака „Милиард смеха“ (XML бомба): Вложени декларации на същности, разширяващи се експоненциално в паметта, за да причинят отказ от услуга.
- XPath инжекция: Непроверени потребителски данни, позволяващи неоторизирани заявки към XML бази данни.
Най-добри практики за защита: Винаги деактивирайте резолюцията на външни DTD и обработката на външни същности (задайте 'disallow-doctype-decl' на true) в XML парсерите.
Исторически произход и етапи
Основни предимства
- Строгата валидация на схеми с помощта на XSD (XML Schema Definition) или DTD гарантира строга цялост на данните.
- Пространствата от имена (xmlns) предотвратяват сблъсъци на имена на елементи в сложни документи от множество източници.
- Мощни инструменти за заявки и трансформации (XPath, XSLT, XQuery).
Технически ограничения и минуси
- Изключително многословен: затварящите тагове повтарят имената на елементите, създавайки големи файлови размери и голяма консумация на честотна лента.
- DOM парсирането изгражда големи обектни дървета, които изискват много памет.
- Податлив на уязвимости в сигурността, свързани с външни XML същности (XXE) и разширяване на същности.
Интересни технически факти
- XML е опростено подмножество на SGML (Standard Generalized Markup Language), проектиран да работи безпроблемно в Световната мрежа.
- Съвременните офисни документи (.docx, .xlsx), векторните изображения (.svg) и RSS емисиите са все специализирани XML диалекти.
- Класическата атака за отказ от услуга „Милиард смеха“ използва само 1 килобайт вложени XML същности (lol1, която се отнася до десет lol0, и така до lol9), за да разшири експоненциално паметта до 3 гигабайта при парсиране.
Често задавани технически въпроси
Каква е разликата между добре оформен и валиден XML?
„Добре формулираният“ XML следва основните правила на синтаксиса (съвпадащи тагове, кавички около атрибутите, един-единствен коренов елемент). „Валидният“ XML е добре формулиран И се придържа стриктно към външна дефиниция на схема (XSD или DTD).
Защо JSON замени XML за повечето уеб API-та?
JSON се преобразува директно в присъщите за JavaScript и езиците за програмиране структури от данни (хеш карти и масиви) с много по-малко излишен код, по-бързо парсиране и по-малки мрежови пакети.
Какво представлява уязвимостта на външните XML същности (XXE)?
Уязвимост от типа XXE възниква, когато XML парсер обработва недоверен документ с разрешена външна дефиниция на типов документ (DTD). Атакуващите могат да дефинират същности, сочещи към локални сървърни файлове (като системни конфигурации) или вътрешни мрежови URL адреси, което кара сървъра да чете и разкрива поверителни данни.