Bezpečnost XML a JSON

Bezpečné zpracování spojuje omezený parser, validaci vstupu, kontrolu oprávnění a správné zacházení s výsledkem. Zvol opatření podle konkrétní fáze integrace.

Autor: Aktualizováno

XML: externí zdroje

U nedůvěryhodného XML vypni nepotřebné DTD, externí entity a XInclude. Omez načítání externích souborů i při validaci XSD a transformaci XSLT; zabezpečení první fáze se automaticky nepřenáší do dalších. Konkrétní konfigurace parserů jsou v kapitole XXE. I bez externích entit může interní DTD vyčerpat paměť; limity rozbalování popisuje sekce billion laughs.

JSON: model a použití dat

Použij parser bez vyhodnocování kódu, datové schéma a seznam dovolených polí. Nepřenes z klienta privilegia jen proto, že jsou syntakticky platná. Podrobnosti klíčů a slučování vysvětluje bezpečnost JSON, včetně prototype pollution při rekurzivním slučování v JavaScriptu.

Podpis a šifrování

Podpis ověřuje podepsaná data a musí být spojen s důvěrou klíče a přesným uzlem, který aplikace čte. Šifrování řeší důvěrnost, nikoli oprávnění k operaci. Kryptografické obálky zpracuj knihovnou a povol jen algoritmy daného profilu.

Limity a provoz

Omez vstupní bajty, hloubku, čas a rozbalenou velikost komprese. Do chybových logů nevypisuj citlivá těla zpráv. Ověř závislosti a výchozí nastavení na konkrétní verzi; neodvozuj je pouze od jazyka.

Všechny kapitoly sekce

Vyber si téma podle toho, co potřebuješ vyřešit. Seznam obsahuje i kapitoly, které se nevejdou do hlavního menu.

  • Bezpečnost: XXE Jak útočník přes externí entitu v XML přečte soubor ze serveru nebo zavolá vnitřní síť, co je billion laughs a jak XXE vypnout v PHP, .NET, Javě, Pythonu a Node.js.
  • Elektronický podpis XML Jak funguje podpis XML dokumentu: element Signature, obálkový a oddělený podpis, kanonizace, XAdES a časové razítko. S příklady z ISDOC a datových schránek.
  • Kanonizace XML (C14N) Kanonizace vytváří z XML definovanou bajtovou reprezentaci, například pro výpočet otisku v digitálním podpisu. Není to běžné odsazení ani obecné srovnání významu dokumentů.
  • XML Encryption XML Encryption ukládá šifrovaná data a informace o algoritmu do XML struktury. Šifrování chrání důvěrnost; důvěryhodnost dokumentu a jeho původ musí aplikace ověřit zvlášť.
  • Bezpečnost JSON JSON je datový formát, ale jeho načtení neověřuje oprávnění ani bezpečnost dalšího použití. Rizika vznikají při vyhodnocování, slučování objektů a práci s příliš velkým vstupem.

Co zkontrolovat od přijetí zprávy po uložení

Představ si API pro změnu doručovací adresy objednávky. Kontrola JSON syntaxe nestačí: zpráva může být správně zapsaná, ale obsahovat cizí číslo objednávky nebo pole role, které klient vůbec nemá nastavovat.

  1. Při přijímání omez velikost zprávy a ověř očekávaný Content-Type.
  2. Načti data parserem s nastavenými omezeními.
  3. Ověř povinná pole, jejich typy a délky podle schématu.
  4. Z přihlášené relace zjisti uživatele a ověř jeho oprávnění k dané objednávce. Identitu nepřebírej z neověřeného pole zprávy.
  5. Vytvoř nový objekt jen z polí, která tato operace dovoluje měnit.
  6. Ulož změnu až po úspěchu všech kontrol. V chybové odpovědi vrať srozumitelnou příčinu bez citlivých dat.

U XML jsou kroky stejné, ale navíc kontroluješ práci s DTD, externími soubory a jmennými prostory. Schéma může odmítnout nesprávnou strukturu; rozhodnutí, kdo smí měnit konkrétní záznam, patří aplikaci.

Jak poznat, že ochrana skutečně funguje

Ke každému opatření si připrav vstup, který jej poruší. Platný vzorek dokazuje jen to, že aplikace přijímá běžná data. Zkus požadavek s polem navíc, chybějícím údajem, cizím ID a zprávou nad limitem. U XML v odděleném testovacím prostředí ověř také odmítnutí nepovoleného externího zdroje.

Výsledek má ukázat, která kontrola selhala: například 415 pro nepodporovaný formát, validační chyba pro nesprávný typ nebo zamítnutí přístupu k cizímu záznamu. Konkrétní HTTP odpovědi zdokumentuj pro své API. Postupy pro parsery najdeš v XXE, pro použití načtených hodnot v bezpečnosti JSON.