Doporučené sanitační knihovny
Doporučení sanitačních a validačních knihoven pro webové aplikace. Přehled doporučených postupů a knihoven pro PHP, Python, JavaScript / Node.js, Java, Ruby, Go a .NET.
Verze 1.0 · Vydáno 28. 9. 2026
Právní upozornění a povaha dokumentu
Nezávazné doporučení. Tento dokument není bezpečnostní audit, penetrační test, certifikace ani právní poradenství.
1. Povaha dokumentu. Tento dokument je nezávazné informativní doporučení, které NetHost poskytuje zákazníkům jako pomoc při zabezpečení jejich vlastních webových aplikací. Není součástí smlouvy ani služby NetHostu.
2. Odpovědnost zákazníka. Za návrh, vývoj, konfiguraci, aktualizace a bezpečnost své aplikace i dat v ní odpovídá výhradně zákazník, případně jeho dodavatel.
3. Bez záruky. Doporučení odpovídá stavu poznání ke dni vydání uvedenému v záhlaví. Knihovny, jejich verze a známé zranitelnosti se průběžně mění.
4. Omezení odpovědnosti. NetHost neodpovídá za škodu, která zákazníkovi nebo třetím osobám vznikne použitím nebo nepoužitím tohoto doporučení, ledaže ji způsobil úmyslně nebo z hrubé nedbalosti.
5. Knihovny třetích stran. Uvedené knihovny jsou produkty jejich autorů a jejich uvedení neznamená, že je NetHost dodává, podporuje nebo za ně ručí.
6. Vazba na regulaci. Správná sanitace vstupů a výstupů je jedním z technických opatření, která po zákazníkovi mohou vyžadovat právní předpisy.
- GDPR, čl. 25 a čl. 32.
- NIS2 a zákon č. 264/2025 Sb. o kybernetické bezpečnosti.
- ISO/IEC 27001 – opatření A.8.28.
- DORA – oblast řízení rizik ICT.
1. Proč sanitace a validace
Většina úspěšných útoků na webové aplikace (SQL injection, XSS, path traversal, header injection) má stejnou příčinu: data od uživatele se dostanou do jiného kontextu, aniž by byla správně ošetřena.
Validace vstupu. Ověř typ, formát, délku a rozsah dat hned po jejich přijetí. Používej allowlist.
Escapování výstupu. Data převáděj pro konkrétní cílový kontext – HTML, JavaScript, URL, CSS, SQL nebo shell.
Oddělení dat od kódu. Používej parametrizované dotazy, automatické escapování a API místo shellu.
Základní princip: validuj vstup, escapuj výstup podle kontextu.
2. Obecné zásady
- Validaci prováděj vždy na serveru. Validace v prohlížeči slouží jen pro pohodlí uživatele.
- Používej allowlist – povolené hodnoty, regulární výraz pro celý řetězec nebo výčet.
- SQL dotazy skládej výhradně s parametry (prepared statements).
- Používej šablonovací systém se zapnutým automatickým escapováním.
- HTML od uživatelů čisti udržovaným HTML sanitizerem s allowlistem tagů a atributů.
- Cesty k souborům nesestavuj z uživatelského vstupu.
- Do HTTP hlaviček nevkládej neověřená data.
- Cookies nastavuj s atributy
Secure,HttpOnlyaSameSite. - Použij CSRF ochranu frameworku.
- Nedeserializuj nedůvěryhodná data nativními formáty.
- Knihovny udržuj aktuální a sleduj bezpečnostní upozornění.
- Nepoužívej knihovny, které autoři označili za zastaralé.
3. Doporučení podle jazyka
Verze uvedené u knihoven jsou poslední stabilní vydání ověřená v oficiálních registrech balíčků ke dni 28. 9. 2026.
PHP
| Oblast | Vestavěné funkce / postup | Doporučené knihovny |
|---|---|---|
| Validace vstupů | filter_var(), filter_input(), striktní typy. | symfony/validator 8.1.7 respect/validation 3.1.2 illuminate/validation 13.33.0 |
| Výstupy a XSS | htmlspecialchars(); automatické escapování v Twig a Blade. | twig/twig 3.30.0 laminas/laminas-escaper 2.18.0 ezyang/htmlpurifier 4.19.1 symfony/html-sanitizer 8.1.7 |
| SQL | PDO prepared statements; PDO::ATTR_EMULATE_PREPARES => false. | doctrine/dbal 4.5.0 doctrine/orm 3.7.2 Eloquent |
| Cesty k souborům | realpath(), kontrola báze, basename(). | – |
| HTTP hlavičky | header(); validace CR/LF. | paragonie/csp-builder 3.1.0 bepsvpt/secure-headers 9.1.1 |
Python
| Oblast | Vestavěné funkce / postup | Doporučené knihovny |
|---|---|---|
| Validace vstupů | Typové anotace, Django Forms, nepoužívat pickle na nedůvěryhodná data. | pydantic 2.13.5 marshmallow 4.3.1 jsonschema 4.26.0 email-validator 2.3.0 defusedxml 0.7.1 |
| Výstupy a XSS | html.escape(); autoescape v Django/Jinja2. | Jinja2 3.1.6 MarkupSafe 3.0.3 nh3 0.3.7 |
| SQL | Parametry předávat zvlášť, nikdy f-string. | psycopg 3.3.6 SQLAlchemy 2.1.1 Django ORM |
| Cesty k souborům | pathlib.Path(...).resolve() a kontrola báze. | Werkzeug 3.1.9 – safe_join() |
JavaScript / Node.js
| Oblast | Vestavěné funkce / postup | Doporučené knihovny |
|---|---|---|
| Validace vstupů | TypeScript typy nestačí – nutná runtime validace. | zod 4.6.5 joi 18.2.9 ajv 8.20.0 validator 13.15.35 express-validator 7.3.2 |
| Výstupy a XSS | Automatické escapování; textContent místo innerHTML. | DOMPurify 3.4.16 isomorphic-dompurify 4.4.0 sanitize-html 2.17.7 |
| SQL | Parametrizované dotazy přes pg nebo mysql2. | pg 8.23.0 mysql2 3.24.4 knex 3.3.0 sequelize 6.37.8 prisma 7.10.0 |
| Cesty k souborům | path.resolve() + kontrola báze. | – |
| HTTP hlavičky | setHeader() | helmet 8.3.0 |
Java
| Oblast | Vestavěné funkce / postup | Doporučené knihovny |
|---|---|---|
| Validace vstupů | Jakarta Bean Validation: @NotNull, @Size, @Pattern, @Email. | jakarta.validation-api 3.1.1 Hibernate Validator 9.1.4.Final |
| Výstupy a XSS | Automatické escapování v Thymeleaf/JSP. | OWASP Java Encoder 1.5.0 OWASP Java HTML Sanitizer 20260924.2 jsoup 1.23.2 |
| SQL | JDBC PreparedStatement; JPA/Hibernate. | Hibernate ORM 7.4.11.Final Spring Data JPA 4.1.1 |
Ruby
| Oblast | Vestavěné funkce / postup | Doporučené knihovny |
|---|---|---|
| Validace vstupů | ActiveModel/ActiveRecord; Strong Parameters. | activerecord 8.1.4 dry-validation 1.11.1 |
| Výstupy a XSS | Rails ERB escapuje automaticky. | rails-html-sanitizer 1.7.1 loofah 2.25.2 sanitize 7.0.0 |
| SQL | ActiveRecord s parametry. | sequel 5.108.0 |
Go
| Oblast | Vestavěné funkce / postup | Doporučené knihovny |
|---|---|---|
| Validace vstupů | strconv, net/mail, net/url. | go-playground/validator v10.30.5 |
| Výstupy a XSS | html/template; nikdy text/template pro HTML. | microcosm-cc/bluemonday v1.0.27 |
| SQL | database/sql se zástupnými parametry. | jackc/pgx v5.11.0 go-sql-driver/mysql v1.10.1 gorm.io/gorm v1.31.2 |
.NET (C# / ASP.NET Core)
| Oblast | Vestavěné funkce / postup | Doporučené knihovny |
|---|---|---|
| Validace vstupů | DataAnnotations a ModelState.IsValid. | FluentValidation 12.1.1 |
| Výstupy a XSS | Razor automaticky kóduje výstup; vyhýbat se Html.Raw(). | HtmlSanitizer 9.2.1039 |
| SQL | ADO.NET SqlCommand s parametry. | Microsoft.EntityFrameworkCore 10.0.12 Dapper 2.1.89 |
4. Příkazy OS (command injection)
Pokud to jde, externí příkazy vůbec nespouštěj a použij knihovnu nebo API jazyka. Když je spuštění nutné, předávej argumenty odděleně, bez shellu, a jejich hodnoty validuj allowlistem.
| Jazyk | Doporučený postup |
|---|---|
| PHP | Shellu se vyhni. Pokud musíš volat exec() nebo shell_exec(), každý argument ošetři escapeshellarg(). |
| Python | subprocess.run(["prikaz", arg1, arg2]); nikdy shell=True s uživatelským vstupem. |
| Node.js | child_process.execFile() nebo spawn() bez shellu. |
| Java | ProcessBuilder se seznamem argumentů. |
5. Zastaralé a nedoporučené knihovny
| Knihovna | Stav | Náhrada |
|---|---|---|
| bleach (Python) 6.4.0 | Zastaralá a již není udržována. | nh3 |
| csurf (npm) 1.11.0 | Archivováno, neudržováno. | CSRF ochrana frameworku |
| xss-clean (npm) 0.1.4 | Package no longer supported. | Validace + escapování výstupu, DOMPurify |
| AntiXSS (NuGet) 4.3.0 | Poslední vydání 2. 6. 2014. | System.Text.Encodings.Web, HtmlSanitizer |
| NWebsec.AspNetCore.Middleware 3.0.0 | Poslední vydání 13. 1. 2020. | NetEscapades.AspNetCore.SecurityHeaders |
| flask-talisman 1.1.0 | Bez aktivity od roku 2023. | Nastavení hlaviček v aplikaci nebo webserveru |
| microcosm-cc/bluemonday | Omezená údržba. | Sledujte stav projektu. |
6. Odkazy
- OWASP Input Validation Cheat Sheet
- OWASP Cross Site Scripting Prevention Cheat Sheet
- OWASP SQL Injection Prevention Cheat Sheet
- OWASP OS Command Injection Defense Cheat Sheet
- OWASP Deserialization Cheat Sheet
- OWASP File Upload Cheat Sheet
- OWASP Path Traversal
- OWASP HTTP Headers Cheat Sheet
- OWASP Content Security Policy Cheat Sheet
- OWASP Top 10
Nezávazné doporučení NetHost, verze 1.0 ze dne 28. 9. 2026. Nejde o záruku ani o součást služby. Odpovědnost za aplikaci nese zákazník podle smlouvy a VOP NetHost.