1. SQL Injection
KritickáÚtočník vloží SQL kód do formuláře nebo URL. Pokud aplikace nepracuje správně se vstupy, může číst, měnit nebo smazat celou databázi — nebo získat admin přístup bez hesla.
Jak to poznat:
Do formuláře zadejte ' OR '1'='1. Pokud se přihlásíte bez správného hesla nebo dostanete SQL chybu, máte problém.
Oprava:
Nikdy neposkládávejte SQL spojováním řetězců. Vždy používejte prepared statements (PDO::prepare() v PHP) nebo ORM (Doctrine, Eloquent).
2. Exponované API klíče a hesla v kódu
KritickáAPI klíče (Stripe, SendGrid, AWS, OpenAI), databázová hesla nebo přístupové tokeny uložené přímo v kódu nebo v .env souborech dostupných veřejně. Zvlášť rizikové pokud je kód na GitHubu.
Jak to poznat:
Zkuste přistoupit na /.env, /config.php nebo /wp-config.php ve vašem prohlížeči. Pokud vidíte obsah souboru, je to problém. Zkontrolujte GitHub repozitář — GitGuardian nebo git log --all --full-history -- "*.env".
Oprava:
Nastavte .htaccess nebo nginx pravidla blokující přístup k .env souborům. Přidejte .env do .gitignore. Rotujte všechny klíče, které mohly být exponovány.
3. XSS — Cross-Site Scripting
VysokáÚtočník vloží JavaScript kód do obsahu webu (komentáře, uživatelský profil, vyhledávání). Kód se pak spustí v prohlížeči ostatních uživatelů — může ukrást session tokeny nebo přesměrovat na phishing.
Oprava:
Vždy escapujte uživatelský vstup před výpisem do HTML. V PHP: htmlspecialchars($vstup, ENT_QUOTES, 'UTF-8'). Nastavte Content Security Policy hlavičku.
4. Slabá autentizace
VysokáHesla uložená jako MD5 nebo plain text. Absence rate limitingu na přihlašovací formuláře (brute force útok vyzkouší milion hesel za hodinu). Session tokeny přenášené přes HTTP (bez HTTPS).
Oprava:
Hesla hashujte přes password_hash($pass, PASSWORD_BCRYPT) (PHP). Implementujte rate limiting (max 10 pokusů za 15 minut). Vždy HTTPS — certifikát Let's Encrypt je zdarma.
5. CSRF — Cross-Site Request Forgery
VysokáÚtočník přiměje přihlášeného uživatele kliknout na odkaz, který vykoná akci na webu bez jeho vědomí — změna hesla, odeslání peněz, smazání dat. Web akci schválí, protože uživatel je přihlášen.
Oprava:
Do každého formuláře přidejte CSRF token — náhodný řetězec generovaný pro každou session, který server ověří při odeslání. Moderní frameworky (Symfony, Laravel) to řeší automaticky.
6. Zastaralý software a CMS
StředníWordPress, Joomla a jejich pluginy jsou cílem automatizovaných botů, kteří skenují internet na starší verze se známými zranitelnostmi. Jedna neaktualizovaná komponenta může stačit.
Oprava:
Pravidelně aktualizujte CMS, pluginy a PHP verzi. Odstraňte nepoužívané pluginy. Pro WordPress: zapněte automatické aktualizace minor verzí a nastavte upozornění.
Kde začít: pět minut checklist
Bez pomoci vývojáře můžete hned teď zkontrolovat:
- Přistupte na
vaseweb.cz/.env— pokud vidíte obsah, urgentně opravte - Zadejte URL webu do observatory.mozilla.org — bezpečnostní hlavičky, HTTPS
- Zkontrolujte verzi PHP (
phpinfo()nebo hosting panel) — PHP pod 8.1 je end-of-life - Projděte WordPress admin — Plugins → přehled dostupných aktualizací
- Otevřete Chrome DevTools → Console — žádné chybové hlášky s "Warning:" nebo "Deprecated:"
Nejčastější otázky
Co je SQL injection a jak mu zabránit?
Jak najít bezpečnostní chyby ve svém webu?
Co dělat, když byl web hacknutý?
Jan Matoušek
Webový vývojář. Programuju od 2004, profesně od 2009. Bezpečnostní audit webu a oprava zranitelností jsou součástí mých technických služeb.