Konfiguracja XML (.xml)
W3C StandardExtensible Markup Language (XML) to wszechstronny język znaczników, który definiuje zestaw reguł kodowania dokumentów w formacie czytelnym zarówno dla ludzi, jak i dla maszyn.
Kompresuj XML online
Prywatnie - pliki nigdy nie opuszczają Twojego urządzenia
Inspekcja i metadane
Systemy operacyjne i analizatory plików identyfikują pliki XML, sprawdzając początkową sekwencję bajtów binarnych:
Podpis nagłówka na poziomie bajtów (Magic Bytes)
Systemy operacyjne i analizatory plików identyfikują pliki XML, sprawdzając początkową sekwencję bajtów binarnych:
PODPIS HEX (OFFSET 0):
3C 3F 78 6DREPREZENTACJA ASCII: <?xm
Normalizacja: W3C Recommendation (XML 1.0 Fifth Edition)
Specyfikacja techniczna
| Architektura kontenera | Hierarchiczny tekstowy język znaczników z niestandardowymi znacznikami semantycznymi i atrybutami |
| Kompresja | Gzip / Deflate osiąga kompresję na poziomie 85%-92% w przypadku rozwlekłych znaczników zamykających |
| Kolejność bajtów (Endianness) | Strumień znaków UTF-8 / UTF-16 określony przez atrybut kodowania w deklaracji XML |
| Przestrzenie kolorów | Nie dotyczy |
| Kanały i struktura | Elementy (<tag>), atrybuty (attr="val"), bloki CDATA, instrukcje przetwarzania |
| Maks. wymiary | Nieograniczona hierarchiczna struktura drzewa |
| Przezroczystość | Nie dotyczy |
| Streaming i progresywne ładowanie | Parsery SAX (Simple API for XML) i StAX umożliwiają odczyt strumieniowy o niskim zużyciu pamięci |
Techniczna macierz porównawcza: XML a konkurencja
| Atrybut techniczny | XML (Bieżący) | JSON | YAML | Protocol Buffers |
|---|---|---|---|---|
| Rozwlekłość | Wysoka (znaczniki zamykające i składnia atrybutów) | Niska (kompaktowy format klucz-wartość) | Niska (oparta na wcięciach) | Bardzo mała (serializacja binarna) |
| Walidacja schematu | Dojrzałe standardy XSD i DTD z wymuszaniem przez kompilator | JSON Schema (opcjonalnie) | JSON Schema / schematy YAML | Ścisłe definicje schematów .proto |
| Przestrzenie nazw | Natywna obsługa przestrzeni nazw XML (xmlns) | Brak natywnego mechanizmu przestrzeni nazw | Brak natywnego mechanizmu przestrzeni nazw | Deklaracje pakietów |
| Transformacje | Deklaratywne potoki transformacji XSLT | Własny kod / skrypty jq | Własny kod | Własny kod |
Typowe tryby uszkodzeń i przewodnik odzyskiwania szesnastkowego
Błąd analizy XML: niezgodny znacznik lub niezdefiniowana encja.
Główna przyczyna: Nieucieczone znaki zastrzeżone (takie jak „&”, „<” lub „>”) albo różnica w wielkości liter między znacznikiem otwierającym a zamykającym.
Odzyskiwanie: Zastąp „&” przez „&”, „<” przez „<”, „>” przez „>” lub umieść dowolny tekst w blokach „<![CDATA[ ... ]]>”.
Analiza bezpieczeństwa i wektory ataku na parser
Parsery XML od dawna należą do najczęściej atakowanych komponentów w systemach informatycznych przedsiębiorstw ze względu na zaawansowane możliwości DTD i rozwijania encji.
Znane wektory ataku
- XML External Entity (XXE): Złośliwa deklaracja DOCTYPE odwołująca się do lokalnych plików serwera („file:///etc/passwd") lub wewnętrznych punktów końcowych sieci.
- Atak Billion Laughs (XML Bomb): Zagnieżdżone deklaracje encji rozwijające się wykładniczo w pamięci, powodujące odmowę usługi.
- Wstrzykiwanie XPath (XPath Injection): Nieoczyszczone dane wejściowe użytkownika pozwalające na nieautoryzowane zapytania do baz danych XML.
Najlepsze praktyki obronne: W parserach XML zawsze wyłączaj rozwiązywanie zewnętrznych DTD i przetwarzanie zewnętrznych encji (ustaw opcję 'disallow-doctype-decl' na true).
Pochodzenie historyczne i kamienie milowe
Główne zalety
- Rygorystyczna walidacja schematu przy użyciu XSD (XML Schema Definition) lub DTD zapewnia ścisłą integralność danych.
- Przestrzenie nazw (xmlns) zapobiegają kolizjom nazw elementów w złożonych dokumentach pochodzących z wielu źródeł.
- Potężne narzędzia do zapytań i transformacji (XPath, XSLT, XQuery).
Ograniczenia techniczne i wady
- Bardzo rozwlekły format: znaczniki zamykające powtarzają nazwy elementów, co zwiększa rozmiar plików i zużycie pasma.
- Parsowanie DOM buduje duże, obciążające pamięć drzewa obiektów.
- Podatny na luki bezpieczeństwa typu XML External Entity (XXE) oraz ekspansję encji.
Ciekawe informacje techniczne
- XML jest uproszczonym podzbiorem SGML (Standard Generalized Markup Language), zaprojektowanym z myślą o bezproblemowej współpracy w sieci World Wide Web.
- Nowoczesne dokumenty biurowe (.docx, .xlsx), grafika wektorowa (.svg) oraz kanały RSS to wyspecjalizowane dialekty XML.
- Klasyczny atak typu „odmowa usługi” (Denial of Service), znany jako „Billion Laughs”, wykorzystuje zaledwie 1 kilobajt zagnieżdżonych encji XML (w których lol1 odwołuje się do dziesięciu lol0, aż do lol9), aby podczas parsowania rozwinąć się wykładniczo i zająć 3 gigabajty pamięci.
Często zadawane pytania techniczne
Jaka jest różnica pomiędzy dobrze sformułowanym a poprawnym (valid) dokumentem XML?
„Dobrze sformułowany" (well-formed) XML przestrzega podstawowych reguł składniowych (pasujące znaczniki, cudzysłowy wokół atrybutów, pojedynczy element główny). „Poprawny" (valid) XML jest zarówno dobrze sformułowany, JAK I ściśle przestrzega definicji zewnętrznego schematu (XSD lub DTD).
Dlaczego JSON zastąpił XML w większości interfejsów API sieciowych?
JSON odwzorowuje się bezpośrednio na natywne struktury danych w JavaScripcie i innych językach programowania (mapy haszujące i tablice), wymaga znacznie mniej kodu pomocniczego, zapewnia szybsze parsowanie i mniejsze ładunki sieciowe.
Co to jest podatność XML External Entity (XXE)?
Podatność XXE występuje, gdy parser XML przetwarza niezaufany dokument z włączoną obsługą zewnętrznej definicji typu dokumentu (DTD). Atakujący mogą zdefiniować encje wskazujące na lokalne pliki serwera (takie jak konfiguracje systemu) lub wewnętrzne adresy URL sieci, co zmusza serwer do odczytania i ujawnienia poufnych danych.