XML конфиг (.xml)

Препоръка Стандарт

Разширяемият език за маркиране (XML) е универсален език за маркиране, който дефинира набор от правила за кодиране на документи във формат, който е четим както за хора, така и за машини.

Компресирайте XML онлайн

Поверително - файловете никога не напускат устройството ви

Проверка и метаданни

Операционните системи и файловите анализатори идентифицират XML файлове чрез проверка на началната двоична байтова последователност:

Изберете или пуснете файлове тук

Поверително - файловете никога не напускат устройството ви

или поставете Ctrl+V
Гаранция за поверителност с нулево мрежово предаване: 0 байта са качени на външни сървъри. Цялата обработка се извършва локално в пясъчниците на вашия браузър.

Байтов подпис на заглавката (сигнатурни байтове)

Операционните системи и файловите анализатори идентифицират XML файлове чрез проверка на началната двоична байтова последователност:

HEX ПОДПИС (ОФСЕТ 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 (Опростен API за XML) и StAX парсери позволяват ефективно четене на потоци с ниска консумация на памет

Техническа сравнителна матрица: XML спрямо конкуренти

Технически атрибутXML (Текущ)JSONYAMLProtocol Buffers
МногословностВисока (затварящи тагове и синтаксис на атрибути)Ниска (компактен формат ключ-стойност)Ниска (с отстъпи)Изключително ниска (бинарна сериализация)
Валидация на схемаЗрели XSD и DTD стандарти с проверка от компилатораJSON схема (по избор)JSON схема / YAML схемиСтриктни .proto дефиниции на схеми
Пространства от именаПоддръжка на нативни XML пространства от имена (xmlns)Няма нативен механизъм за пространства от именаНяма нативен механизъм за пространства от именаДекларации на пакети
ТрансформацииXSLT декларативни трансформационни конвейериПотребителски код / jq скриптовеПотребителски кодПотребителски код

Често срещани видове повреди и ръководство за възстановяване на шестнадесетични данни

Грешка при XML парсиране: несъответстващ таг или недефинирана същност.

Първопричина: Неескейпнати запазени символи (като '&', '<' или '>') или несъответствие в малките/главните букви между отварящите и затварящите тагове.

Възстановяване: Заменете '&' с '&amp;', '<' с '&lt;', '>' с '&gt;' или обвийте произволен текст в '<![CDATA[ ... ]]>'' блок.

Анализ на сигурността и вектори на атака към парсера

XML парсерите исторически са били едни от най-атакуваните компоненти в корпоративните изчисления поради мощните възможности за DTD и разширяване на същности.

Известни вектори на атака

  • XML външна същност (XXE): Злонамерен DOCTYPE, сочещ към локални файлове на сървъра ('file:///etc/passwd') или вътрешни мрежови крайни точки.
  • Атака „Милиард смеха“ (XML бомба): Вложени декларации на същности, разширяващи се експоненциално в паметта, за да причинят отказ от услуга.
  • XPath инжекция: Непроверени потребителски данни, позволяващи неоторизирани заявки към XML бази данни.

Най-добри практики за защита: Винаги деактивирайте резолюцията на външни DTD и обработката на външни същности (задайте 'disallow-doctype-decl' на true) в XML парсерите.

Исторически произход и етапи

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 диалекти.
  • Класическата атака за отказ от услуга „Милиард смеха“ използва само 1 килобайт вложени XML същности (lol1, която се отнася до десет lol0, и така до lol9), за да разшири експоненциално паметта до 3 гигабайта при парсиране.

Често задавани технически въпроси

Каква е разликата между добре оформен и валиден XML?

„Добре формулираният“ XML следва основните правила на синтаксиса (съвпадащи тагове, кавички около атрибутите, един-единствен коренов елемент). „Валидният“ XML е добре формулиран И се придържа стриктно към външна дефиниция на схема (XSD или DTD).

Защо JSON замени XML за повечето уеб API-та?

JSON се преобразува директно в присъщите за JavaScript и езиците за програмиране структури от данни (хеш карти и масиви) с много по-малко излишен код, по-бързо парсиране и по-малки мрежови пакети.

Какво представлява уязвимостта на външните XML същности (XXE)?

Уязвимост от типа XXE възниква, когато XML парсер обработва недоверен документ с разрешена външна дефиниция на типов документ (DTD). Атакуващите могат да дефинират същности, сочещи към локални сървърни файлове (като системни конфигурации) или вътрешни мрежови URL адреси, което кара сървъра да чете и разкрива поверителни данни.