XML-configuratie (.xml)
W3C StandaardExtensible Markup Language (XML) is een veelzijdige opmaaktaal die een set regels definieert voor het coderen van documenten in een formaat dat zowel door mensen als door machines kan worden gelezen.
XML online comprimeren
Privé - bestanden verlaten uw apparaat niet
Inspecteren en metadata
Besturingssystemen en bestandsanalysators herkennen XML-bestanden aan de hand van de eerste binaire bytesequentie:
Bestandshandtekening op byteniveau (magic bytes)
Besturingssystemen en bestandsanalysators herkennen XML-bestanden aan de hand van de eerste binaire bytesequentie:
HEX-HANDTEKENING (OFFSET 0):
3C 3F 78 6DASCII-WEERGAVE: <?xm
Standaardisatie: W3C Recommendation (XML 1.0 Fifth Edition)
Technische specificaties
| Containerarchitectuur | Hiërarchische tekstuele opmaaktaal met aangepaste semantische tags en attributen |
| Compressie | Gzip / Deflate bereikt 85-92% compressie bij de omslachtige sluittags |
| Bytevolgorde (endianness) | UTF-8- of UTF-16-tekenstroom, bepaald door het encoding-attribuut in de XML-declaratie |
| Kleurruimten | Niet van toepassing |
| Kanalen en structuur | Elementen (<tag>), attributen (attr="val"), CDATA-blokken, verwerkingsinstructies |
| Maximale afmetingen | Onbegrensde hiërarchische boomstructuur |
| Transparantie | Niet van toepassing |
| Streaming en progressief | SAX (Simple API for XML)- en StAX-parsers maken geheugenefficiënt lezen van gegevensstromen mogelijk |
Technische vergelijkingsmatrix: XML versus concurrenten
| Technisch kenmerk | XML (Huidig) | JSON | YAML | Protocol Buffers |
|---|---|---|---|---|
| Uitgebreidheid | Hoog (sluittags en attribuutsyntaxis) | Laag (compact sleutel-waardeformaat) | Laag (op inspringing gebaseerd) | Ultralaag (binaire serialisatie) |
| Schemavalidatie | Volwassen XSD- en DTD-standaarden, afgedwongen door de compiler | JSON Schema (optioneel) | JSON Schema / YAML-schema's | Strikte .proto-schemadefinities |
| Naamruimten | Ondersteuning voor native XML-naamruimten (xmlns) | Geen native naamruimtemechanisme | Geen native naamruimtemechanisme | Pakketdeclaraties |
| Transformaties | Declaratieve XSLT-transformatiepijplijnen | Aangepaste code / jq-scripts | Aangepaste code | Aangepaste code |
Veelvoorkomende beschadigingen en gids voor hex-herstel
XML Parsing Error: mismatched tag or entity not defined.
Oorzaak: Niet-geëscapete gereserveerde tekens (zoals '&', '<' of '>') of een verschil in hoofdletters en kleine letters tussen openings- en sluittags.
Herstel: Vervang '&' door '&', '<' door '<', '>' door '>', of plaats willekeurige tekst in een CDATA-sectie.
Beveiligingsanalyse en aanvalsvectoren voor parsers
XML-parsers behoren historisch gezien tot de meest aangevallen componenten in zakelijke IT-omgevingen vanwege de krachtige mogelijkheden voor DTD's en entiteitsexpansie.
Bekende aanvalsvectoren
- XML External Entity (XXE): kwaadaardige DOCTYPE die verwijst naar lokale serverbestanden ('file:///etc/passwd') of interne netwerkeindpunten.
- Billion Laughs-aanval (XML-bom): geneste entiteitsdeclaraties die exponentieel uitbreiden in het geheugen om een denial of service te veroorzaken.
- XPath-injectie: niet-opgeschoonde gebruikersinvoer waarmee XML-databases zonder toestemming kunnen worden doorzocht.
Aanbevolen beveiligingspraktijken: Schakel externe DTD-resolutie en externe entiteitsverwerking altijd uit (stel setFeature 'disallow-doctype-decl' in op true) in XML-parsers.
Historische oorsprong en mijlpalen
Belangrijkste voordelen
- Strenge schemavalidatie met behulp van XSD (XML Schema Definition) of DTD zorgt voor strikte integriteit van gegevens.
- Naamruimten (xmlns) voorkomen botsingen tussen elementnamen in complexe documenten met meerdere bronnen.
- Krachtige toolchains voor query's en transformaties (XPath, XSLT, XQuery).
Technische beperkingen
- Extreem omslachtig: sluittags herhalen elementnamen, wat zorgt voor grote bestanden en een hoog bandbreedteverbruik.
- DOM-parsing bouwt grote, geheugenintensieve objectbomen.
- Gevoelig voor beveiligingskwetsbaarheden zoals XXE (XML External Entity) en entiteitsexpansie.
Interessante technische weetjes
- XML is een vereenvoudigde subset van SGML (Standard Generalized Markup Language), ontworpen om naadloos via het World Wide Web te werken.
- Moderne kantoordocumenten (.docx, .xlsx), vectorafbeeldingen (.svg) en RSS-feeds zijn allemaal gespecialiseerde XML-dialecten.
- De klassieke 'Billion Laughs'-denial-of-service-aanval gebruikt slechts 1 kilobyte aan geneste XML-entiteiten (lol1 die verwijst naar tien lol0's, tot aan lol9) om bij het parsen exponentieel uit te breiden tot 3 gigabyte aan geheugen.
Veelgestelde technische vragen
Wat is het verschil tussen welgevormde en geldige XML?
Welgevormde XML volgt de basisregels van de syntaxis (bij elkaar passende tags, aanhalingstekens rond attributen, één hoofdelement). Geldige XML is welgevormd EN voldoet strikt aan een externe schemadefinitie (XSD of DTD).
Waarom heeft JSON XML vervangen voor de meeste web-API's?
JSON sluit direct aan op de gegevensstructuren van JavaScript en andere programmeertalen (hashmaps en arrays), met veel minder boilerplate, snellere parsing en kleinere netwerkpayloads.
Wat is een XML External Entity (XXE)-kwetsbaarheid?
Een XXE-kwetsbaarheid treedt op wanneer een XML-parser een niet-vertrouwd document verwerkt met een ingeschakelde externe Document Type Definition (DTD). Aanvallers kunnen entiteiten definiëren die verwijzen naar lokale serverbestanden (zoals systeemconfiguraties) of interne netwerk-URL's, waardoor de server vertrouwelijke gegevens leest en openbaar maakt.