Přeskočit na hlavní obsah

Validace, sanitizace a encoding

  • Všechna data, která do aplikace přicházejí je potřeba považovat za nedůvěryhodná a ověřit, že jde o očekávaná data (email, datum narození atd.) - k tomu slouží validace.
  • Data mohou obsahovat nebezpečné řetězce nebo kód (<, >, /, \ atd.), a proto se musí vhodně ošetřit, aby nebyla nebezpečná - k tomu slouží sanitizace.
  • Výsledná data je potřeba zobrazit v odpovídajícím formátu a převést je z podoby A do podoby B - k tomu slouží encoding.
  • Checklist pomáhá s validací uživatelského vstupu, sanitizací, sandboxingem, prevencí injection a dalším.

Validace vstupu

  • Eliminuje až 90 % injection útoků.

  • Ověřte existenci ochrany HTTP parametrů, zejména pokud framework nerozlišuje zdroj parametrů (GET, POST, cookies…).

  • Ověřte existenci mass assignment opatření.

    • Mass assignment = úprava datových položek, ke který by neměl mít uživatel přístup, např. povolení admin funkcionality pomocí isAdmin=1 query parametru.
  • Ověřte, zda jsou všechny vstupy ověřeny pomocí seznamu povolených nebo zakázaných hodnot (allow / black list).

  • Ověřte, zda jsou strukturovaná data silně typovaná a validovaná podle definované normy (kreditní karta, email…).

  • Ověřte, zda se přesměrování a forwarding provádí pouze na cíle uvedené v seznamu povolených adres nebo zda se při přesměrování na nedůvěryhodný obsah zobrazí varování.

Sanitizace a sandboxing

  • Ověřte správnost sanitizace pomocí knihovny nebo funkce frameworku všech nedůvěryhodných vstupů (výstup z WYSIWYG…).
  • Ověřte sanitizaci nestrukturovaných dat a dodržte bezpečnostní opatření (délka, povolené znaky…).
  • Ověřte, zda se před odesláním do poštovních systémů upravuje uživatelský vstup a chrání se před SMTP nebo IMAP injection.
  • Ověřte, zda se nepoužívá funkce eval() nebo jiný dynamický kód. Sanitizujte a sandboxujte veškerý uživatelský vstup před spuštěním, pokud není jiná možnost.
  • Ověřte existenci ochrany proti template injection a zajistěte sanitizaci a sandboxing všech uživatelských vstupů.
  • Ověřte existenci ochrany proti SSRF validací a sanitizací nedůvěryhodných dat (URL, porty, soubory…).
  • Ověřte sanitizaci a zakázání nebo sandboxování uživatelem zadaných údajů (SVG, skripty, CSS, markdown…), které by mohly způsobit např. XSS.

Encoding a prevence injection

  • Selhání encodingu výstupu vede k injection útokům.

  • Ověřte relevanci výstupního kódování pro daný interpret a kontext (HTML, JS, SMTP, jméno s apostrofem…).

  • Ověřte, zda encoding bezpečně zachovává uživatelem zvolenou znakovou sadu.

  • Ověřte, zda je výstup chráněný před všemi typy XSS.

  • Ověřte, zda jsou databázové dotazy parametrizované, používá se ORM a entity.

  • Ověřte použití specifického kódování, které chrání před injection útoky (escapování) v případě, že není k dispozici query parametrizace nebo jiné mechanismy.

  • Ověřte existenci ochrany proti JS nebo JSON injection včetně eval útoků a XSS.

  • Ověřte existenci ochrany proti LDAP injection.

  • Ověřte existenci ochrany proti OS command injection.

  • Ověřte existenci ochrany proti local file inclusion (LFI) nebo remote file inclusion (RFI) útokům.

  • Ověřte existenci ochrany proti XPath nebo XML injection.

Požadavky na paměť, řetězce a neřízený kód

  • Aplikuje se v případě, že jsou používány systémové jazyky nebo neřízený kód.

  • Ověřte použití paměťově bezpečných řetězců, bezpečnější kopírování paměti a aritmetiky ukazatelů pro detekci a prevenci přetečení zásobníku, vyrovnávací paměti nebo haldy.

  • Ověřte, zda formátovací řetězce nepřijímají potenciálně nepřátelský vstup a zda jsou konstantní.

  • Ověřte použití technik ověřování rozsahů a vstupů. aby se zabránilo přetečení celých čísel.

Deserializace

  • Ověřte použití kontroly integrity nebo šifrování serializovaných obejktů.
  • Ověřte správnost omezení XML parseru (konfigurace), aby nedošlo k XXE.
  • Ověřte, zda je zamezeno deserializaci nedůvěryhodných dat ve vlastním kódu i knihovnách třetích stran.
  • Ověřte, že při parsování JSON se používá JSON.parse, nikoli eval.

Kam dál

Zranitelnosti

Cheat sheety