XML konfiguracija (.xml)

W3C Standard

Extensible 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:

Izaberite ili prevucite datoteke ovde

Privatno - datoteke nikada ne napuštaju vaš uređaj

ili nalepite Ctrl+V
Garancija privatnosti: bez prenosa podataka preko mreže 0 bajtova poslato spoljnim serverima. Sva obrada je izvršena lokalno u bezbednom okruženju vašeg pregledača.

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 6D

ASCII REPREZENTACIJA: <?xm

Standardizacija: W3C preporuka (XML 1.0 peto izdanje)

Tehničke specifikacije

Arhitektura kontejneraHijerarhijski tekstualni jezik za označavanje sa prilagođenim semantičkim oznakama i atributima
KompresijaGzip / 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 bojaNije primenjivo
Kanali i strukturaElementi (<tag>), atributi (attr="val"), CDATA blokovi, instrukcije za obradu
Maksimalne dimenzijeNeograničena hijerarhijska struktura stabla
TransparentnostNije primenjivo
Strimovanje i progresivno učitavanjeSAX (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 atributXML (Trenutno)JSONYAMLProtocol Buffers
OpširnostVisoka (zatvarajuće oznake i sintaksa atributa)Niska (kompaktan format ključ-vrednost)Niska (bazirano na uvlačenju)Ultra-niska (binarna serijalizacija)
Validacija šemeZreli XSD i DTD standardi sa primenom preko kompajleraJSON Schema (opciono)JSON Schema / YAML šemeStroge .proto definicije šema
Imenski prostoriPodrška za nativne XML imenske prostore (xmlns)Nema nativni mehanizam imenskih prostoraNema nativni mehanizam imenskih prostoraDeklaracije paketa
TransformacijeXSLT deklarativni cevovodi transformacijePrilagođeni kod / jq skriptePrilagođeni kodPrilagođ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 '&amp;', '<' sa '&lt;', '>' sa '&gt;', 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

2008W3C objavljuje XML 1.0 peto izdanje, standardizujući modernu podršku za međunarodne znakove.
2000W3C objavljuje XML Schema 1.0 (XSD) i DOM Level 2, uspostavljajući strukturirano tipiziranje i arhitekture događaja.
1998W3C objavljuje preporuku XML 1.0 kao pojednostavljen podskup SGML-a pogodan za veb.

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.