XML konfiguracija (.xml)
W3C StandardExtensible Markup Language (XML) je svestran jezik za označavanje koji definiše skup pravila za kodiranje dokumenata u formatu koji je čitljiv i za ljude i za mašine.
Kompresujte XML na mreži
Privatno - datoteke nikada ne napuštaju vaš uređaj
Pregled i metapodaci
Operativni sistemi i analizatori datoteka identifikuju XML datoteke proverom početnog binarnog niza bajtova:
Potpis zaglavlja na nivou bajtova (magični bajtovi)
Operativni sistemi i analizatori datoteka identifikuju XML datoteke proverom početnog binarnog niza bajtova:
HEKSADECIMALNI POTPIS (OFFSET 0):
3C 3F 78 6DASCII REPREZENTACIJA: <?xm
Standardizacija: W3C preporuka (XML 1.0 peto izdanje)
Tehničke specifikacije
| Arhitektura kontejnera | Hijerarhijski tekstualni jezik za označavanje sa prilagođenim semantičkim oznakama i atributima |
| Kompresija | Gzip / Deflate postiže kompresiju od 85%-92% na opširnim zatvarajućim oznakama |
| Bajtni redosled (Endianness) | Tok znakova UTF-8 / UTF-16 određen atributom kodiranja u XML deklaraciji |
| Prostori boja | Nije primenjivo |
| Kanali i struktura | Elementi (<tag>), atributi (attr="val"), CDATA blokovi, instrukcije za obradu |
| Maksimalne dimenzije | Neograničena hijerarhijska struktura stabla |
| Transparentnost | Nije primenjivo |
| Strimovanje i progresivno učitavanje | SAX (Simple API for XML) i StAX parseri omogućavaju čitanje tokova uz efikasno korišćenje memorije |
Tehnička matrica poređenja: XML u odnosu na konkurente
| Tehnički atribut | XML (Trenutno) | JSON | YAML | Protocol Buffers |
|---|---|---|---|---|
| Opširnost | Visoka (zatvarajuće oznake i sintaksa atributa) | Niska (kompaktan format ključ-vrednost) | Niska (bazirano na uvlačenju) | Ultra-niska (binarna serijalizacija) |
| Validacija šeme | Zreli XSD i DTD standardi sa primenom preko kompajlera | JSON Schema (opciono) | JSON Schema / YAML šeme | Stroge .proto definicije šema |
| Imenski prostori | Podrška za nativne XML imenske prostore (xmlns) | Nema nativni mehanizam imenskih prostora | Nema nativni mehanizam imenskih prostora | Deklaracije paketa |
| Transformacije | XSLT deklarativni cevovodi transformacije | Prilagođeni kod / jq skripte | Prilagođeni kod | Prilagođeni kod |
Uobičajeni režimi oštećenja i vodič za heksadecimalni oporavak
Greška pri XML parsiranju: nepodudarna oznaka ili nedefinisan entitet.
Osnovni uzrok: Neescapovani rezervisani znakovi (poput '&', '<' ili '>') ili neusklađenost malih i velikih slova između otvarajućih i zatvarajućih oznaka.
Oporavak: Zamenite '&' sa '&', '<' sa '<', '>' sa '>', ili upakujte proizvoljan tekst unutar '<![CDATA[ ... ]]>' blokova.
Bezbednosna analiza i vektori napada parsera
XML parseri su istorijski bili jedna od komponenti koje su najviše napadane u preduzećima zbog moćnih DTD mogućnosti i mogućnosti proširivanja entiteta.
Poznati vektori napada
- XML External Entity (XXE): Zlonamerni DOCTYPE koji upućuje na lokalne datoteke servera ('file:///etc/passwd') ili interne mrežne krajnje tačke.
- Billion Laughs napad (XML bomba): Ugnježdene deklaracije entiteta koje se eksponencijalno šire u memoriji i izazivaju uskraćivanje usluge.
- XPath injekcija: Nevalidirani korisnički unosi koji dozvoljavaju neovlašćeno postavljanje upita nad XML bazom podataka.
Najbolje prakse za zaštitu: Uvek onemogućite spoljašnju DTD rezoluciju i obradu spoljašnjih entiteta (postavite podešavanje 'disallow-doctype-decl' na true) u XML parserima.
Istorijat i prekretnice
Ključne prednosti
- Stroga validacija šeme pomoću XSD-a ili DTD-a obezbeđuje integritet podataka.
- Imenski prostori (xmlns) sprečavaju kolizije imena elemenata u složenim dokumentima iz više izvora.
- Moćni alati za upite i transformaciju (XPath, XSLT, XQuery).
Tehnička ograničenja i nedostaci
- Izuzetno opširno: zatvarajuće oznake ponavljaju imena elemenata, stvarajući velike veličine datoteka i visoku potrošnju propusnog opsega.
- DOM parsiranje gradi velika stabla objekata koja zahtevaju mnogo memorije.
- Podložno bezbednosnim ranjivostima XML External Entity (XXE) i proširivanja entiteta.
Zanimljivosti
- XML je pojednostavljeni podskup SGML-a (Standard Generalized Markup Language), dizajniran da radi besprekorno preko Svetske mreže (World Wide Web).
- Moderni kancelarijski dokumenti (.docx, .xlsx), vektorske slike (.svg) i RSS fidovi su specijalizovani XML dijalekti.
- Klasični 'Billion Laughs' napad uskraćivanja usluge (DoS) koristi samo 1 kilobajt ugnježdenih XML entiteta (lol1 koji se odnosi na deset lol0-a, sve do lol9) da bi se eksponencijalno proširio na 3 gigabajta memorije prilikom parsiranja.
Često postavljana tehnička pitanja
Koja je razlika između dobro formiranog i validnog XML-a?
'Dobro formiran' XML prati osnovna pravila sintakse (odgovarajuće oznake, navodnici oko atributa, jedan korenski element). 'Validan' XML je dobro formiran I striktno se pridržava definicije spoljašnje šeme (XSD ili DTD).
Zašto je JSON zamenio XML za većinu veb API-ja?
JSON se direktno preslikava na nativne strukture podataka u JavaScript-u i programskim jezicima (heš mape i nizovi) sa mnogo manje propratnog koda, bržim parsiranjem i manjim mrežnim paketima.
Šta je XML External Entity (XXE) ranjivost?
XXE ranjivost se javlja kada XML parser obrađuje dokument koji mu se ne može verovati, a koji ima omogućenu spoljašnju deklaraciju tipa dokumenta (DTD). Napadači mogu definisati entitete koji ukazuju na lokalne datoteke servera (kao što su sistemske konfiguracije) ili interne mrežne URL adrese, što dovodi do toga da server čita i otkriva poverljive podatke.