WordPress webů se každý měsíc napadne přes 90 000. Většina kvůli neaktualizovaným pluginům, slabému heslu a chybějícím bezpečnostním headerům. Bezpečnost webu není jen pro banky a e-shopy — pokud zpracováváte e-mail v kontaktním formuláři, máte odpovědnost. V tomto návodu projedeme checklist 2026, který vás ochrání před 95 % běžných útoků.
Co se v tomto článku dozvíte
- Co je SSL, HTTPS, HSTS a proč je dnes všechno povinné
- Bezpečnostní headery (CSP, X-Frame-Options, Permissions-Policy) — minimum, které musíte mít
- Jak nastavit zálohy správně (3-2-1 strategie, retention)
- OWASP Top 10 (2024) — 10 nejčastějších chyb, kvůli kterým weby padají
- Jak detekovat útok dřív, než je pozdě
SSL, HTTPS, HSTS — minimum 2026
Co je SSL/TLS
SSL (dnes přejmenováno na TLS) je šifrování mezi prohlížečem a serverem. Bez něj chodí vaše hesla, formulářová data a sušenky po síti v plain textu. Soused na kavárně Wi-Fi to vidí.
HTTPS = TLS + HTTP
HTTPS je HTTP přes TLS. Aktivujete jednorázovým instalováním SSL certifikátu na server.
Pro 99 % webů stačí Let's Encrypt — zdarma, automatická obnova každých 90 dní. Pokud máte hosting v ČR (Wedos, Forpsi), často je v ceně. Cloudflare také zdarma.
HSTS — vynucení HTTPS
I po nasazení HTTPS uživatel přijde na http://web.cz, server udělá redirect 301 na https://. Mezi tímto hopem může útočník udělat man-in-the-middle.
HSTS header říká prohlížeči: „už nikdy nezkoušej HTTP, vždy rovnou HTTPS". Přidejte do .htaccess nebo nginx config:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Bezpečnostní HTTP headery
Pět headerů, které snižují riziko XSS, clickjackingu a data leaků:
1. Content-Security-Policy (CSP)
Omezuje, kde se můžou načítat scripty, styly, fonty atd. Příklad pro typický web:
Content-Security-Policy: default-src 'self';
script-src 'self' 'unsafe-inline' https://www.googletagmanager.com;
style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;
font-src 'self' https://fonts.gstatic.com;
img-src 'self' data: https:;
frame-src 'self' https://www.youtube.com;
2. X-Frame-Options
Brání clickjackingu (vložit váš web do iframe na jiné stránce a klamat uživatele).
X-Frame-Options: SAMEORIGIN
3. X-Content-Type-Options
Brání MIME-sniffing zranitelnostem.
X-Content-Type-Options: nosniff
4. Referrer-Policy
Kontroluje, jaké informace se posílají v Referer headeru.
Referrer-Policy: strict-origin-when-cross-origin
5. Permissions-Policy (dříve Feature-Policy)
Omezuje přístup k API jako kamera, mikrofon, geolokace.
Permissions-Policy: camera=(), microphone=(), geolocation=(self)
Test: nasazení ověřte na securityheaders.com — cíl je grade A nebo A+.
Strategie záloh: 3-2-1
Klasické pravidlo:
- 3 kopie dat
- na 2 různých médiích / službách
- z toho 1 off-site (mimo váš server)
Co konkrétně zálohovat
- Databáze — denně, retention 30 dní.
mysqldump --all-databases | gzip > backup-$(date +%F).sql.gz - Uploady (obrázky, PDF, soubory) — denně inkrementálně, plně 1× týdně.
- Konfigurace — git repository (privátní GitLab / GitHub).
- Logy — 90 dní, alespoň access a error log.
Kam ukládat
Lokální server + cloudové úložiště (Hetzner Storage Box, Backblaze B2, AWS S3 Glacier). Nikdy jen lokálně — ransomware útok zničí lokální zálohu spolu s primárními daty.
Restore test
Záloha, která se nikdy neobnovila, je iluze. 1× za 6 měsíců spusťte cvičný restore. Najdete tím chyby ve skriptu i ve vlastní hlavě.
OWASP Top 10 — co opravdu řešit (2024)
- A01 Broken Access Control — uživatel A vidí data uživatele B kvůli chybnému check. Řešení: vždy kontrolovat ownership, nepřibližovat se k „security through obscurity".
- A02 Cryptographic Failures — slabá šifrování, hesla v plaintextu, MD5 hashe. Řešení: bcrypt/argon2 pro hesla, TLS 1.3 minimum.
- A03 Injection — SQL injection, command injection, LDAP injection. Řešení: prepared statements vždy a všude.
- A04 Insecure Design — chybějící rate limiting, anti-CSRF, audit log. Designové chyby se hůř opravují než kódové.
- A05 Security Misconfiguration — defaultní hesla, debug v produkci, exposed admin paneli. Řešení: pre-flight checklist před deployem.
- A06 Vulnerable Components — staré verze Wordpressu, Laravelu, Node packages. Řešení: dependabot / renovate-bot, monthly audit.
- A07 Authentication Failures — slabá hesla, brute force, missing 2FA. Řešení: argon2, rate limiting, povinné 2FA pro admin.
- A08 Software / Data Integrity — neověřené updates, supply chain útoky. Řešení: SRI (Subresource Integrity) pro CDN, signed packages.
- A09 Security Logging Failures — žádný audit log, nikdo nesleduje anomálie. Řešení: structured logs do Sentry / Better Stack.
- A10 SSRF — server-side request forgery. Řešení: allowlist URL pro server-side fetche, ne user-supplied URLs.
Detekce útoku — jak poznat, že vás napadli
- Náhlý nárůst trafficu z jedné země / IP rozsahu (často Čína, Rusko, Indie).
- Nová admin uživatelská účta, která jste nevytvořili.
- Změna obsahu článků nebo stránek (často spam linky, redirects).
- Nové soubory v
/uploads/nebo/wp-content/s podivnými názvy (wso.php,shell.php,r57.php). - Pokles pozic ve vyhledávači (Google detekuje malware a sníží ranking nebo úplně deindexuje).
- Phishing alert v Google Search Console.
Bezpečnostní monitoring zdarma
- Wordfence (WordPress) nebo Sucuri SiteCheck — týdenní sken
- Have I Been Pwned — kontrola, zda nějaký z vašich e-mailů nebyl součástí leaků
- Cloudflare WAF (free tier) — automatická obrana proti běžným útokům
- Fail2ban — banuje IP po N neúspěšných pokusech (SSH, login)
Případová studie: webpj.cz
Když jsem webpj.cz nasazoval v lednu 2026, prošel jsem následující bezpečnostní setup:
- HTTPS + HSTS s preload
- 5 security headerů → securityheaders.com grade A+
- Argon2 pro hesla, rate limiting na login (5 pokusů / 15 min)
- Audit log všech admin akcí (kdo, co, kdy)
- Denní mysqldump zálohy → SFTP → Hetzner Storage Box
- Restore test 1× za 3 měsíce
- Cloudflare WAF (free tier)
- SecurityLog model — automatická detekce podezřelých vzorů
Za 4 měsíce provozu: 0 incidentů, ~150 zablokovaných login attempts, ~12 zachycených SQL injection pokusů.
Často kladené otázky
Kolik stojí pořádné zabezpečení?
Pokud máte slušný hosting + Let's Encrypt + Cloudflare free, technický základ je zdarma. Implementační čas vývojáře = 4–8 hodin pro malý web, 16–40 hodin pro e-shop. Měsíční audit a sledování = 2–5 tis. Kč.
Mám 2FA pro admin login?
Ano, vždy. Slabé heslo + úkrytá databáze = recipe na disaster. Google Authenticator nebo Authy stačí.
Co dělat při napadení?
- Okamžitě dejte web do údržby (maintenance mode)
- Změňte všechna admin hesla a API klíče
- Obnovte z poslední čisté zálohy
- Najděte a opravte vulnerabilitu (logy, file scan)
- Notifikujte uživatele, pokud se ztratila data (GDPR — povinnost do 72 h)
- Z vlastních zkušeností: ihned se obraťte na profesionální security konzultantu
Vyplatí se WAF zdarma od Cloudflare?
Ano, jednoznačně. Cloudflare free tier zahrnuje DDoS protection, basic WAF rules, SSL, CDN. Pro většinu malých a středních webů to stačí.
Co je SQL injection?
Útok, kdy uživatel pošle do formulářového pole speciální znaky, které z hesla udělají SQL příkaz (' OR '1'='1). Bez prepared statements váš dotaz „SELECT * FROM users WHERE password = '$pass'" provede „SELECT * FROM users WHERE password = '' OR '1'='1'", což vrátí všechny uživatele.