XML konfiguráció (.xml)
W3C SzabványAz Extensible Markup Language (XML) sokoldalú jelölőnyelv, amely szabályokat határoz meg a dokumentumok ember és gép számára egyaránt olvasható formátumban történő kódolására.
XML tömörítése online
Privát - a fájlok soha nem hagyják el az eszközét
Vizsgálat és metaadatok
Az operációs rendszerek és a fájlelemzők a kezdő bináris bájtsorozat vizsgálatával azonosítják a(z) XML fájlokat:
Bájtszintű fejlécaláírás (fájlazonosító bájtok)
Az operációs rendszerek és a fájlelemzők a kezdő bináris bájtsorozat vizsgálatával azonosítják a(z) XML fájlokat:
HEX ALÁÍRÁS (ELTOLÁS 0):
3C 3F 78 6DASCII ÁBRÁZOLÁS: <?xm
Szabványosítás: W3C Recommendation (XML 1.0 Fifth Edition)
Műszaki specifikációk
| Konténer architektúra | Hierarchikus szöveges jelölőnyelv egyedi szemantikai tagekkel és attribútumokkal |
| Tömörítés | A Gzip / Deflate 85%-92%-os tömörítést ér el a terjedelmes záró tageken |
| Bájtsorrend | UTF-8 / UTF-16 karaktersorozat, amelyet az XML deklaráció kódolási attribútuma határoz meg |
| Színterek | Nem alkalmazható |
| Csatornák és struktúra | Elemek (<tag>), attribútumok (attr="val"), CDATA blokkok, feldolgozási utasítások |
| Max. méretek | Korlátlan hierarchikus faszerkezet |
| Átlátszóság | Nem alkalmazható |
| Streaming és progresszív | A SAX- és StAX-elemzők memóriatakarékos adatfolyam-olvasást tesznek lehetővé |
Műszaki összehasonlító mátrix: XML vs. versenytársak
| Technikai attribútum | XML (Jelenlegi) | JSON | YAML | Protocol Buffers |
|---|---|---|---|---|
| Bőbeszédűség | Magas (zárócímkék és attribútumszintaxis) | Alacsony (kompakt kulcs-érték formátum) | Alacsony (behúzásalapú) | Ultra-alacsony (bináris szerializáció) |
| Sémaellenőrzés | Kifejlett XSD és DTD szabványok fordítói ellenőrzéssel | JSON Schema (opcionális) | JSON Schema / YAML sémák | Szigorú .proto-sémadefiníciók |
| Névterek | Natív XML-névtértámogatás (xmlns) | Nincs natív névtérmechanizmus | Nincs natív névtérmechanizmus | Csomagdeklarációk |
| Átalakítások | XSLT deklaratív átalakítási folyamatok | Egyedi kód / jq szkriptek | Egyedi kód | Egyedi kód |
Gyakori sérülési módok és hexadecimális helyreállítási útmutató
XML-elemzési hiba: nem egyező zárótag vagy nem definiált entitás.
Kiváltó ok: Nem escape-elt fenntartott karakterek (mint az '&', '<' vagy '>') vagy eltérés a nyitó és záró tagek között.
Helyreállítás: Cserélje le az '&'-t '&'-re, a '<'-t '<'-re, a '>'-t '>'-re, vagy csomagolja be a tetszőleges szöveget '<![CDATA[ ... ]]>'' blokkokba.
Biztonsági elemzés és elemző (parser) támadási vektorok
Az XML-elemzők történelmileg a vállalati számítástechnika egyik leginkább támadott komponensei voltak a hatékony DTD- és entitásbővítési képességek miatt.
Ismert támadási vektorok
- XML External Entity (XXE): Rosszindulatú DOCTYPE, amely helyi kiszolgálófájlokra ('file:///etc/passwd') vagy belső hálózati végpontokra hivatkozik.
- Milliárd nevetés támadás (XML Bomb): Beágyazott entitásdeklarációk, amelyek exponenciálisan bővülnek a memóriában, szolgáltatásmegtagadást okozva.
- XPath-injekció: Nem szűrt felhasználói bemenetek, amelyek jogosulatlan lekérdezést tesznek lehetővé az XML-adatbázisokban.
Ajánlott védekezési módszerek: Mindig tiltsa le a külső DTD-feloldást és a külső entitások feldolgozását (állítsa a 'disallow-doctype-decl' beállítást true értékre) az XML-elemzőkben.
Történeti háttér és mérföldkövek
Főbb előnyök
- A szigorú sémaellenőrzés XSD (XML Schema Definition) vagy DTD használatával biztosítja a szigorú adatintegritást.
- A névterek (xmlns) megakadályozzák az elemek neveinek ütközését összetett, több forrásból származó dokumentumokban.
- Erőteljes lekérdezési és átalakítási eszközkészlet (XPath, XSLT, XQuery).
Technikai korlátok és hátrányok
- Rendkívül bőbeszédű: a zárócímkék megismétlik az elemek neveit, ami nagy fájlméretet és jelentős sávszélesség-igényt okoz.
- A DOM elemzés nagy, nagy memóriaigényű objektumfákat hoz létre.
- Ki van téve az XML External Entity (XXE) és az entitáskibővítési támadásoknak.
Érdekes technikai tudnivalók
- Az XML az SGML (Standard Generalized Markup Language) egyszerűsített részhalmaza, amelyet úgy terveztek, hogy zökkenőmentesen működjön a világhálón (World Wide Web).
- A modern irodai dokumentumok (.docx, .xlsx), a vektorképek (.svg) és az RSS-hírcsatornák mind speciális XML-dialektusok.
- A klasszikus „Milliárd nevetés" (Billion Laughs) szolgáltatásmegtagadási támadás mindössze 1 kilobájtnyi beágyazott XML-entitást használ (a lol1 tíz lol0-ra hivatkozik, egészen lol9-ig), amely elemzéskor exponenciálisan 3 gigabájtnyi memóriát foglal le.
Gyakran Ismételt Műszaki Kérdések
Mi a különbség a jól formázott (well-formed) és az érvényes (valid) XML között?
A „jól formázott" XML betartja az alapvető szintaxisszabályokat (egyező tagek, idézőjelek az attribútumok körül, egyetlen gyökérelem). Az „érvényes" XML jól formázott ÉS szigorúan megfelel egy külső sémadefiníciónak (XSD vagy DTD).
Miért váltotta fel a JSON az XML-t a legtöbb webes API esetében?
A JSON közvetlenül leképezhető a natív JavaScript- és programozási nyelvi adatszerkezetekre (hash-táblák és tömbök), sokkal kevesebb sablonkóddal, gyorsabb elemzéssel és kisebb hálózati adatmennyiséggel.
Mi az az XML External Entity (XXE) sérülékenység?
Az XXE-sérülékenység akkor fordul elő, amikor egy XML-elemző feldolgoz egy nem megbízható dokumentumot engedélyezett külső dokumentumtípus-definícióval (DTD). A támadók olyan entitásokat határozhatnak meg, amelyek a helyi kiszolgálófájlokra (például rendszerkonfigurációkra) vagy belső hálózati URL-ekre mutatnak, így a kiszolgáló elolvashatja és felfedheti a bizalmas adatokat.