Programování

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.

12. 10. 2026 · 4 min čtení

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.