Průvodce zabezpečením
Vyber nástroj, kterým stavíš, a zjisti na co si dát pozor. Prompty na konci stránky fungují ve všech AI nástrojích.
S čím stavíš?
Každý nástroj má jiné možnosti a jiná rizika. Vyber kategorii, která ti sedí.
Vizuální buildery (bez kódu)
Ideální pro vizitky, landing pages a jednoduché aplikace. Hosting v ceně, nemusíš řešit server.
Lovable
lovable.dev
Bolt
bolt.new
v0
v0.dev
Replit
replit.com
Macaly
macaly.com
Vývojářské AI nástroje
Plná kontrola nad stackem. Potřebuješ vlastní hosting (VPS, Vercel, AWS…) a základní znalost vývoje.
Claude Code
claude.ai/claude-code
Cursor
cursor.com
Windsurf
windsurf.com
Jak zabezpečit projekt od začátku
AI nástroje neřeší bezpečnost automaticky. Musíš jim říct co mají dodržovat — a nejlépe hned na začátku, ne až po nasazení. Výzkum ukazuje, že fázovaný přístup (pravidla na začátku + review na konci) snižuje zranitelnosti až 10×.
Zkopíruj na začátek projektu. Řekni AI jaká pravidla má dodržovat od prvního řádku kódu.
Vytvářím webovou aplikaci. Dodržuj tyto bezpečnostní pravidla od začátku: 1. Všechny secrets (API klíče, hesla, tokeny) patří do .env souboru, nikdy do kódu. Vytvoř .env.example s placeholder hodnotami. 2. Nastav HTTP security headers: HSTS, Content-Security-Policy, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy. 3. Nastav CORS — povol pouze konkrétní domény, nikdy wildcard (*) v produkci. 4. Použij security middleware (Django SecurityMiddleware, helmet pro Node.js, Rack::Protection pro Rails). 5. Každý POST formulář musí mít CSRF ochranu. 6. Session cookies: HttpOnly=true, Secure=true, SameSite=Lax. Hesla vždy hashuj (bcrypt/argon2), nikdy neukládej plain text. 7. Žádný debug mód v produkci. Vlastní error stránky pro 404 a 500 — nesmí prozrazovat stack trace. Odstraň debug logy. 8. Vstup od uživatele validuj na frontendu I backendu. Používej ORM nebo parametrizované dotazy — nikdy string concatenation v SQL. 9. API endpointy: každý endpoint musí kontrolovat autentizaci I autorizaci. Nikdy neberi user ID z URL — vždy ze session (prevence IDOR). Odděluj CRUD routy od server actions. 10. Rate limiting na login a citlivé endpointy. Pro veřejné API nastav IP block list proti zneužití. 11. Nastav limity pro upload souborů (velikost, typ, počet). Ověřuj skutečný obsah souboru (magic bytes), nespoléhej jen na příponu nebo MIME typ. 12. HTTPS vždy, HTTP přesměruj na HTTPS. 13. Tracking skripty (Google Analytics, Facebook Pixel) načítej až po souhlasu uživatele (cookie consent). 14. Externí skripty z CDN musí mít integrity atribut (Subresource Integrity) kde je to možné.
Ulož jako CLAUDE.md (Claude Code), .cursorrules (Cursor) nebo do system promptu. AI nástroj je načte automaticky při každé session.
# Security pravidla ## Secrets - Žádné API klíče, hesla ani tokeny v kódu — vše do .env - .env musí být v .gitignore - .env.example obsahuje pouze placeholder hodnoty ## HTTP Security - Content-Security-Policy: bez unsafe-inline kde je to možné - Strict-Transport-Security: max-age=31536000; includeSubDomains - X-Frame-Options: DENY - X-Content-Type-Options: nosniff - Referrer-Policy: strict-origin-when-cross-origin - Permissions-Policy: camera=(), microphone=(), geolocation=() - CORS: povol pouze konkrétní domény, nikdy wildcard (*) v produkci ## Middleware - Použij security middleware svého frameworku (Django SecurityMiddleware, helmet pro Node.js, Rack::Protection pro Rails) ## Formuláře a vstup - Každý POST formulář má CSRF token - Uživatelský vstup validuj na frontendu I backendu - SQL dotazy pouze přes ORM nebo parametrizované dotazy - Limity pro upload souborů (velikost, typ, počet). Ověřuj obsah (magic bytes), nespoléhej na příponu ## API & autorizace - Každý endpoint kontroluje autentizaci I autorizaci - Nikdy nebrat user ID z URL parametrů — vždy ze session (prevence IDOR) - CRUD routy oddělené od server actions - Rate limiting + IP block list na veřejné API endpointy ## Cookies, session a hesla - HttpOnly=true, Secure=true, SameSite=Lax - Session regenerace po přihlášení - Hesla hashuj přes bcrypt nebo argon2, nikdy plain text ## Produkce - DEBUG=false, vlastní error stránky (404, 500) - ALLOWED_HOSTS nastaveny explicitně - Odstraň debug logy a console.log ## Před každým commitem - Zkontroluj, že v kódu nejsou hardcoded secrets - Zkontroluj, že nové endpointy mají autorizaci
Zadej poté co AI vygeneruje kód. Výzkum ukazuje, že self-review snižuje zranitelnosti až 10×.
Zkontroluj kód, který jsi právě vygeneroval. Projdi ho z pohledu OWASP Top 10: 1. Jsou všechny vstupy od uživatele validované na frontendu I backendu? 2. Jsou SQL dotazy parametrizované nebo přes ORM (žádná string concatenation)? 3. Jsou formuláře chráněné CSRF tokenem? 4. Nejsou v kódu hardcoded secrets (API klíče, hesla, tokeny)? 5. Jsou error stránky bezpečné (neprozrazují stack trace)? Jsou debug logy odstraněny? 6. Jsou cookies nastaveny s HttpOnly, Secure a SameSite? 7. Jsou hesla hashovaná (bcrypt/argon2), nikdy plain text? 8. Mají endpointy kontrolu autentizace I autorizace? Není možný IDOR (přístup k cizím datům přes ID v URL)? 9. Je rate limiting na citlivých endpointech? Je nastaven CORS? 10. Jsou limity pro upload souborů (velikost, typ)? Je ověřen skutečný obsah (magic bytes)? 11. Je security middleware aktivní? Pokud najdeš problém, oprav ho a vysvětli co jsi změnil.
Prompty pro konkrétní oblasti
Použij ve chvíli kdy pracuješ na konkrétní části — formuláře, autentizace, deploy. Kopíruj do Claude Code, Cursoru, Lovable, Boltu nebo jakéhokoliv AI nástroje.
Přidej HTTP security headers: HSTS, CSP bez unsafe-inline, X-Frame-Options DENY, X-Content-Type-Options nosniff, Referrer-Policy strict-origin-when-cross-origin. Pro Django použij django-csp.
Zkontroluj, že žádné API klíče, hesla ani tokeny nejsou hardcoded. Secrets musí být v .env souboru v .gitignore. Vytvoř .env.example s placeholder hodnotami.
Ověř, že všechny formuláře mají CSRF token. V Django musí být {% verbatim %}{% csrf_token %}{% endverbatim %} v každém <form>. Přidej rate limiting na login přes django-ratelimit.
Ověř že DEBUG=False v produkci. Nastav vlastní error stránky pro 404 a 500, které neprozrazují stack trace. Přidej ALLOWED_HOSTS a SECURE_HSTS_SECONDS.
Nikdy nepoužívej string concatenation v SQL dotazech. Vždy používej Django ORM nebo parametrizované dotazy. Prohledej kód na raw() a execute() volání s uživatelskými daty.
Session cookies musí mít HttpOnly=True, Secure=True, SameSite=Strict. Přidej session_regenerate po každém přihlášení. Nikdy neberi user ID z URL parametrů — vždy ze session.
Zkontroluj závislosti projektu na známé zranitelnosti. Spusť příslušný audit příkaz pro svůj ekosystém: - Python: pip audit - Node.js: npm audit - PHP: composer audit Nebo použij Kontrolu závislostí na Vibescan.cz — vlož obsah requirements.txt, package.json nebo composer.json a výsledek zkopíruj tlačítkem „Kopírovat pro AI“ přímo do svého AI nástroje. Ten ti navrhne konkrétní aktualizace. Aktualizuj balíčky s Critical a High CVE na opravenou verzi. Pokud aktualizace není možná (breaking changes), ověř zda se zranitelnost týká tvého use-case. Pokud ne, zdokumentuj důvod v komentáři. Po aktualizaci a otestování znovu zkontroluj závislosti — nové verze balíčků mohou obsahovat jiné známé zranitelnosti. Nastav automatické kontroly závislostí v CI/CD (Dependabot, Renovate nebo Snyk).
Nastav HTTPS redirect — veškerý HTTP provoz musí být přesměrován na HTTPS (301 redirect). Nastav HSTS header (Strict-Transport-Security: max-age=31536000; includeSubDomains). Pro Django: SECURE_SSL_REDIRECT=True, SECURE_HSTS_SECONDS=31536000. Pro Nginx: return 301 https://$host$request_uri;
Zkontroluj všechny odkazy s target="_blank" — každý musí mít rel="noopener noreferrer". Bez toho může otevřená stránka přistoupit k window.opener a přesměrovat původní záložku na phishing (reverse tabnabbing). Odstraň HTML komentáře obsahující TODO, password, api_key nebo debug — jsou viditelné v zdrojovém kódu stránky.
Přidej integrity atribut na všechny externí scripty a styly z CDN. SRI zajišťuje, že prohlížeč odmítne spustit soubor, který byl na CDN změněn. Vygeneruj hash přes: echo sha384-$(curl -s URL | openssl dgst -sha384 -binary | openssl base64 -A). Příklad: <script src="https://cdn.example.com/lib.js" integrity="sha384-..." crossorigin="anonymous"></script>
Nastav DNS záznamy pro ochranu domény proti email spoofingu: 1. **SPF** — TXT záznam na root doméně: v=spf1 include:_spf.google.com ~all (uprav podle poskytovatele emailu) 2. **DMARC** — TXT záznam na _dmarc.domena.cz: v=DMARC1; p=reject; rua=mailto:dmarc@domena.cz (začni s p=none pro monitoring, pak p=quarantine, nakonec p=reject) 3. **DKIM** — nastav podle poskytovatele emailu (Google Workspace, Microsoft 365) 4. **CAA** — omez které certifikační autority mohou vydat certifikát: 0 issue "letsencrypt.org" 5. **DNSSEC** — aktivuj u registrátora domény 6. **security.txt** — vytvoř /.well-known/security.txt s kontaktním emailem pro hlášení zranitelností (RFC 9116) 7. **robots.txt** — neprozrazuj citlivé cesty (/admin, /backup, /.env) v Disallow pravidlech
Odstraň meta tag generator nebo z něj odstraň číslo verze. Útočník vyhledá v CVE databázi známé zranitelnosti pro konkrétní verzi CMS. Pro WordPress: add_filter('the_generator', '__return_empty_string'); Pro obecné: odstraň <meta name="generator" content="..."> z HTML.
Vygeneruj právní dokumenty a základní prvky přístupnosti pro můj web:
1. **Cookie consent lišta** — Zobraz lištu se souhlasem s cookies před načtením jakýchkoliv tracking skriptů. Tlačítka "Přijmout" a "Odmítnout" musí mít stejnou vizuální váhu (stejná velikost, stejný styl). Tracking skripty (GA, GTM, Facebook Pixel) se smí načíst až po souhlasu.
2. **Stránka ochrany osobních údajů** — Vytvoř stránku /ochrana-osobnich-udaju/ s informacemi: kdo data zpracovává (název, IČO, adresa, kontakt), jaká data sbíráme, proč a na jakém právním základě (GDPR čl. 6), jak dlouho data uchováváme, práva návštěvníků (přístup, výmaz, přenositelnost, námitka), kontakt na DPO (pokud existuje), odkaz na podání stížnosti u ÚOOÚ.
3. **Patička webu** — V patičce musí být: © rok a název provozovatele, odkaz na ochranu osobních údajů, IČO provozovatele.
4. **Přístupnost** — Přidej odkaz pro přeskočení navigace (<a href="#main" class="sr-only focus:not-sr-only">Přeskočit na obsah</a>) jako první prvek v <body>. V CSS přidej @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; } } pro uživatele s vestibulárními potížemi.
Poznámka: Vygenerované texty jsou šablony — uprav je podle skutečných údajů o provozovateli a zpracování dat.
Nastav logování a monitoring pro produkční nasazení: 1. **Access logy** — Loguj každý HTTP request včetně skutečné IP klienta (ne interní IP proxy). Za reverse proxy (Nginx, Cloudflare) použij X-Forwarded-For nebo X-Real-IP header. V Nginx: set_real_ip_from a real_ip_header. 2. **Error logy** — Loguj všechny chyby (500, výjimky, timeouty). Nikdy neloguj citlivá data (hesla, tokeny, osobní údaje). Pro Django: nastav LOGGING v settings.py s handlery pro soubor i stdout. 3. **Persistentní logy** — V Dockeru logy defaultně mizí s kontejnerem. Mountuj log adresář na host: volumes: - ./logs:/var/log/nginx. Přidej logs/ do .gitignore. 4. **Log rotace** — Nastav logrotate nebo Docker logging driver s max-size limitem, aby logy nezaplnily disk. 5. **Monitoring** — Nastav uptime monitoring (UptimeRobot, Healthchecks.io) pro včasné odchycení výpadků.
Nastav základní SEO meta tagy na každé stránce: 1. **<title>** — Unikátní titulek 50–60 znaků. Zobrazuje se ve výsledcích vyhledávání a v záložkách prohlížeče. 2. **<meta name="description">** — Popisek 120–160 znaků. Google ho zobrazuje pod titulkem ve výsledcích. 3. **<link rel="canonical">** — Canonical URL určuje hlavní verzi stránky. Předchází problémům s duplicitním obsahem (např. s/bez www, s/bez trailing slash). 4. **Open Graph tagy** — og:title, og:description, og:image určují jak stránka vypadá při sdílení na sociálních sítích. 5. **<h1> nadpis** — Každá stránka by měla mít právě jeden <h1>. Popisuje hlavní téma stránky pro vyhledávače i uživatele. 6. **<html lang="cs">** — Jazykový atribut pomáhá vyhledávačům i hlasovým čtečkám.
Rychlost webu přímo ovlivňuje pozici ve vyhledávání (Core Web Vitals jsou ranking faktor od 2021). Pomalý web = horší pozice + vyšší bounce rate. 1. **Obrázky ve WebP/AVIF** — Servíruj obrázky v moderních formátech (WebP, AVIF) místo PNG/JPEG. Úspora 30–80 % velikosti. Použij <picture> element s fallbackem: <source srcset="img.avif" type="image/avif">, <source srcset="img.webp" type="image/webp">, <img src="img.jpg">. 2. **Lazy loading** — Přidej loading="lazy" na obrázky pod ohybem stránky (mimo viewport). Prohlížeč je načte až když se k nim uživatel scrollne. 3. **Minifikace CSS/JS** — Minimalizuj a komprimuj CSS a JavaScript. Zapni gzip/brotli kompresi na serveru (Nginx: gzip on; Cloudflare/Vercel: automaticky). 4. **PageSpeed Insights** — Otestuj rychlost webu na https://pagespeed.web.dev/ — změří Core Web Vitals (LCP, INP, CLS) a dá ti konkrétní doporučení co zrychlit. Cíl je skóre 90+ v mobile i desktop. 6. **Google Search Console** — Zaregistruj web na https://search.google.com/search-console/ — uvidíš jak Google indexuje tvůj web, jaké máš chyby a na jaké dotazy se zobrazuješ. 7. **Seznam Webmaster** — Pro český trh přidej web i na https://search.seznam.cz/wt/pridej-stranku — Seznam má v ČR stále ~15 % podíl na vyhledávání. 8. **Sitemap.xml** — Vygeneruj sitemap.xml a přidej ho do Search Console. Pomáhá vyhledávačům najít všechny stránky webu. 9. **robots.txt** — Vytvoř robots.txt v kořeni webu. Povol indexaci veřejných stránek, zakaž admin sekce a interní API.
Použil jsi prompty a zabezpečil projekt? Spusť sken a zjisti, jestli ti ještě něco nechybí. Vibescan zkontroluje hlavičky, SSL, DNS a další oblasti během pár sekund.