XML-konfiguraatio (.xml)
W3C StandardiExtensible Markup Language (XML) on monipuolinen merkintäkieli, joka määrittelee säännöt sellaisten asiakirjojen koodaamiseen, jotka ovat sekä ihmisen luettavissa että koneellisesti käsiteltävissä.
Pakkaa XML verkossa
Yksityisesti - tiedostot eivät koskaan poistu laitteeltasi
Tarkastele tiedostoa ja sen metatietoja
Käyttöjärjestelmät ja tiedostoanalyysaattorit tunnistavat XML-tiedostot tarkistamalla tiedoston alun binäärisarjan:
Otsaketunniste tavutasolla (tunnistetavut)
Käyttöjärjestelmät ja tiedostoanalyysaattorit tunnistavat XML-tiedostot tarkistamalla tiedoston alun binäärisarjan:
HEKSADEKSIMAALINEN TUNNISTE (SIJAINTI 0):
3C 3F 78 6DASCII-ESITYSTAPA: <?xm
Standardointi: W3C Recommendation (XML 1.0 Fifth Edition)
Tekniset tiedot
| Säiliöarkkitehtuuri | Hierarkkinen tekstimerkintäkieli mukautetuilla semanttisilla tunnisteilla ja attribuuteilla |
| Pakkaus | Gzip / Deflate pienentää runsaasti toistuvia lopetustunnisteita sisältävän tekstin kokoa 85%-92% |
| Tavujärjestys (Endianness) | UTF-8- tai UTF-16-merkkivirta, joka määräytyy XML-määrityksen koodausattribuutin mukaan |
| Väriavaruudet | Ei sovellettavissa |
| Kanavat ja rakenne | Elementit (<tag>), attribuutit (attr="val"), CDATA-lohkot, käsittelyohjeet |
| Suurimmat mitat | Rajoittamaton hierarkkinen puurakenne |
| Läpinäkyvyys | Ei sovellettavissa |
| Suoratoisto ja progressiivinen lataus | SAX- (Simple API for XML) ja StAX-jäsentimet mahdollistavat muistitehokkaan virran lukemisen |
Tekninen vertailumatriisi: XML vs. kilpailijat
| Tekninen attribuutti | XML (Nykyinen) | JSON | YAML | Protocol Buffers |
|---|---|---|---|---|
| Runsassanaisuus | Korkea (lopetustunnisteet ja attribuuttisyntaksi) | Vähäinen (kompakti avain-arvo-muoto) | Vähäinen (sisennyspohjainen) | Erittäin vähäinen (binäärisarjallistaminen) |
| Skeematarkistus | Kypsemmät XSD- ja DTD-standardit kääntäjävalvonnalla | JSON Schema (valinnainen) | JSON Schema / YAML-skeemat | Tiukat .proto-skeemamääritykset |
| Nimiavaruudet | Natiivi XML-nimiavaruuksien (xmlns) tuki | Ei natiivia nimiavaruusmekanismia | Ei natiivia nimiavaruusmekanismia | Pakettimääritykset |
| Muunnokset | XSLT-deklaratiiviset muunnosputket | Mukautettu koodi / jq-skriptit | Mukautettu koodi | Mukautettu koodi |
Yleiset vioittumistavat ja heksadesimaalinen palautusopas
XML-jäsennysvirhe: virheellinen tunniste tai määrittelemätön entiteetti.
Perussyy: Escapoimattomat varatut merkit (kuten '&', '<' tai '>') tai kirjainkoon ero aloitus- ja lopetustunnisteiden välillä.
Korjaus: Korvaa '&' merkillä '&', '<' merkillä '<', '>' merkillä '>' tai kääri mielivaltainen teksti '<![CDATA[ ... ]]>'-lohkojen sisään.
Tietoturva-analyysi ja tiedostojäsentimien hyökkäysvektorit
XML-jäsentimet ovat historiallisesti olleet yritysten tietojenkäsittelyn eniten hyökkäysten kohteena olevia komponentteja DTD:n ja entiteettien tehokkaiden laajennusominaisuuksien vuoksi.
Tunnetut hyökkäysvektorit
- XML:n ulkoinen entiteetti (XXE): Haitallinen DOCTYPE, joka viittaa paikallisiin palvelintiedostoihin ('file:///etc/passwd') tai sisäisen verkon päätepisteisiin.
- Billion Laughs -hyökkäys (XML-pommi): Sisäkkäiset entiteettimääritykset, jotka laajenevat muistissa eksponentiaalisesti ja aiheuttavat palvelunestotilan.
- XPath-injektio: Puhdistamattomat käyttäjän syötteet, jotka mahdollistavat luvattomat kyselyt XML-tietokantoihin.
Tietoturvan parhaat käytännöt: Poista aina käytöstä ulkoinen DTD-resoluutio ja ulkoisten entiteettien käsittely (aseta ominaisuus 'disallow-doctype-decl' arvoon true) XML-jäsentimissä.
Historia ja virstanpylväät
Tärkeimmät edut
- Tarkka skeematarkistus XSD:n (XML Schema Definition) tai DTD:n avulla varmistaa tiukan tietojen eheyden.
- Nimiavaruudet (xmlns) estävät elementtien nimien törmäykset monimutkaisissa useista lähteistä kootuissa asiakirjoissa.
- Tehokkaat kysely- ja muunnostyökaluketjut (XPath, XSLT, XQuery).
Tekniset rajoitukset
- Äärimmäisen runsassanainen: lopetustunnisteet toistavat elementtien nimiä, mikä aiheuttaa suuria tiedostokokoja ja suurta kaistanleveyden kulutusta.
- DOM-jäsennys muodostaa suuria, runsaasti muistia kuluttavia oliopuita.
- Altis ulkoisten XML-entiteettien (XXE) ja entiteettien laajenemisen tietoturva-aukoille.
Mielenkiintoisia teknisiä faktoja
- XML on SGML:n (Standard Generalized Markup Language) yksinkertaistettu osajoukko, joka on suunniteltu toimimaan saumattomasti World Wide Webissä.
- Modernit toimistoasiakirjat (.docx, .xlsx), vektorigrafiikat (.svg) ja RSS-syötteet ovat kaikki erikoistuneita XML-murteita.
- Klassinen 'Billion Laughs' -palvelunestohyökkäys käyttää vain 1 kilotavua sisäkkäisiä XML-entiteettejä (lol1 viittaa kymmeneen lol0-entiteettiin, aina lol9:ään asti), jotka laajenevat jäsennyksen yhteydessä eksponentiaalisesti 3 gigatavuun muistissa.
Usein kysytyt tekniset kysymykset
Mitä eroa on hyvin muotoillulla ja validilla XML:llä?
'Hyvin muotoiltu' (well-formed) XML noudattaa perussyntaksisääntöjä (vastaavat tunnisteet, lainausmerkit attribuuttien ympärillä, yksi juurielementti). Kelvollinen XML on sekä hyvin muotoiltua että noudattaa tiukasti ulkoista skeemamääritystä (XSD tai DTD).
Miksi JSON korvasi XML:n useimmissa web-rajapinnoissa?
JSON vastaa suoraan JavaScriptin ja muiden ohjelmointikielten tietorakenteita (hajautustaulukoita ja taulukoita) huomattavasti vähäisemmällä mallikoodilla, nopeammalla jäsennyksellä ja pienemmillä verkkokuormilla.
Mikä on XML:n ulkoinen entiteetti (XXE) -haavoittuvuus?
XXE-haavoittuvuus ilmenee, kun XML-jäsennin käsittelee epäluotettavaa asiakirjaa, jossa ulkoinen asiakirjatyyppimääritys (DTD) on käytössä. Hyökkääjät voivat määrittää entiteettejä, jotka osoittavat paikallisiin palvelintiedostoihin (kuten järjestelmäasetuksiin) tai sisäisiin verkon URL-osoitteisiin, jolloin palvelin lukee ja paljastaa luottamuksellista tietoa.