OWASP Top 10 srozumitelně – nejčastější díry webových aplikací
Projděte si OWASP Top 10 bez akademické omáčky. Každá kategorie s praktickým příkladem chyby a konkrétní obranou, kterou zavedete ještě dnes.
OWASP Top 10 je seznam nejčastějších a nejzávažnějších kategorií zranitelností webových aplikací, který sestavuje nezisková organizace OWASP (Open Worldwide Application Security Project). Nejde o normu, ale o praktický kontrolní seznam: pokud se vaše aplikace vyhne těmto deseti oblastem, máte za sebou většinu běžných útoků. Níže je přehled podle vydání OWASP Top 10:2021, které je stále nejrozšířenějším referenčním bodem (OWASP průběžně připravuje novější vydání, takže si na owasp.org ověřte aktuální stav).
A01 – Broken Access Control (selhání řízení přístupu)
Uživatel se dostane k datům nebo akcím, na které nemá právo. Klasika: URL /api/faktury/1042 vrátí fakturu komukoli, kdo zná číslo.
Obrana:
- Ověřujte oprávnění na serveru u každého požadavku, ne jen schováním tlačítka v UI.
- Při dotazu do DB filtrujte podle vlastníka: WHERE id = ? AND user_id = ?.
- Výchozí stav je „zakázáno“, povolení se přidává explicitně.
A02 – Cryptographic Failures (kryptografická selhání)
Citlivá data putují bez TLS, hesla se ukládají v MD5 nebo SHA-1, klíče jsou natvrdo v kódu.
Obrana: HTTPS všude (včetně HSTS), hesla hashovat pomalým algoritmem (Argon2id, bcrypt, scrypt), nepoužívat vlastní kryptografii.
# pip install argon2-cffi
from argon2 import PasswordHasher
ph = PasswordHasher()
h = ph.hash("tajne-heslo")
ph.verify(h, "tajne-heslo") # vyhodí výjimku, pokud nesedí
A03 – Injection
SQL injection, command injection, LDAP injection… Vstup od uživatele se dostane do interpretu jako kód. Od roku 2021 sem spadá i XSS.
Obrana: parametrizované dotazy, žádné skládání příkazů z řetězců, escapování výstupu podle kontextu.
A04 – Insecure Design (nebezpečný návrh)
Chyba není v implementaci, ale v samotném návrhu. Například obnova hesla přes „bezpečnostní otázku“ nebo chybějící limit na počet pokusů o přihlášení.
Obrana: threat modeling už při návrhu – položte si otázku „jak by to šlo zneužít?“ u každé funkce, která pracuje s penězi, účty nebo osobními daty.
A05 – Security Misconfiguration (špatná konfigurace)
Zapnutý debug režim v produkci, výchozí hesla, otevřený výpis adresářů, podrobné chybové stránky se stack trace.
Obrana: oddělená konfigurace pro produkci, minimum zapnutých služeb, automatická kontrola hlaviček (např. curl -I https://vas-web.cz).
A06 – Vulnerable and Outdated Components
Zastaralé knihovny se známými CVE. Útočník nemusí hledat chybu ve vašem kódu, stačí mu ta v balíčku, který používáte.
Obrana: pravidelně spouštějte npm audit, pip-audit, zapněte Dependabot nebo Renovate.
A07 – Identification and Authentication Failures
Slabá hesla povolena, chybí ochrana proti zkoušení hesel (credential stuffing), session ID se po přihlášení nemění.
Obrana: rate limiting, 2FA, po přihlášení vygenerovat nové session ID, cookies s HttpOnly, Secure a SameSite.
A08 – Software and Data Integrity Failures
Aplikace věří datům nebo kódu bez ověření – nepodepsané aktualizace, deserializace nedůvěryhodných dat (pickle.loads na vstupu od uživatele), CI pipeline, kterou může ovlivnit kdokoli.
Obrana: nikdy nedeserializujte nedůvěryhodná data nativními formáty (používejte JSON), zamykejte verze závislostí (lockfile), chraňte CI tajemství.
A09 – Security Logging and Monitoring Failures
Útok proběhne a nikdo si ho nevšimne. Chybí logy neúspěšných přihlášení, změn oprávnění nebo neobvyklých objemů požadavků.
Obrana: logujte bezpečnostně relevantní události (bez hesel a tokenů!), nastavte upozornění na anomálie.
A10 – Server-Side Request Forgery (SSRF)
Aplikace stahuje obsah z URL zadané uživatelem. Útočník zadá http://169.254.169.254/ (metadata cloudu) nebo http://localhost:6379/ a server pro něj udělá požadavek do interní sítě.
Obrana: povolený seznam domén (allowlist), blokování privátních a link-local rozsahů IP po DNS překladu, zakázat přesměrování.
Jak s OWASP Top 10 pracovat v praxi
| Fáze | Co udělat |
|---|---|
| Návrh | Projít A01, A04 a A07 – kdo smí co a jak se přihlašuje |
| Vývoj | Parametrizované dotazy, escapování, žádné tajemství v kódu |
| CI | Audit závislostí, statická analýza (např. Semgrep, Bandit pro Python) |
| Provoz | Logy, monitoring, pravidelné aktualizace |
Nejlepší je udělat si z deseti bodů checklist do šablony pull requestu. Když recenzent u každé změny vidí otázku „řeší tato změna oprávnění?“, chyby typu A01 se chytí ještě před nasazením.
Pokud chcete projít konkrétní kód, nahrajte ho do Projektu v ColdHost AI a požádejte v režimu Programování o kontrolu podle OWASP Top 10 – nejlépe s modelem Polaris, který si na složitější analýze dá víc záležet.