# Bezpečnosť — Slovník kontrol

11 bezpečnostných kontrol

---

## SEC1 — HTTPS

**Čo to je:** Kontrola, či web používa zabezpečený protokol HTTPS namiesto nešifrovaného HTTP. HTTPS šifruje komunikáciu medzi prehliadačom a serverom pomocou TLS certifikátu, čím chráni citlivé údaje (heslá, platobné informácie) pred odpočúvaním.

**Prečo je to dôležité:** Bez HTTPS môže útočník v sieti zachytiť a zmeniť dáta prenášané medzi používateľom a webom (man-in-the-middle útok). Moderné prehliadače označujú HTTP stránky ako 'nezabezpečené' a mnohé API (geolokácia, kamera, service workers) fungujú výlučne cez HTTPS. Google tiež používa HTTPS ako ranking signál.

**Príklad z praxe:** Stripe.com má HTTPS na každej stránke vrátane marketingových podstránok — nielen na platobnom formulári. Naopak, lokálny e-shop bez HTTPS zobrazí v Chrome varovanie 'Nezabezpečené' priamo v adresnom riadku, čo odradí zákazníkov od nákupu.

### Zdroje
- [Why HTTPS Matters](https://web.dev/articles/why-https-matters) — web.dev
- [Transport Layer Security (TLS)](https://developer.mozilla.org/en-US/docs/Web/Security/Defenses/Transport_Layer_Security) — MDN

---

## SEC2 — Strict-Transport-Security (HSTS)

**Čo to je:** Kontrola prítomnosti HTTP hlavičky Strict-Transport-Security s hodnotou max-age minimálne 31536000 (1 rok). HSTS prikazuje prehliadaču, aby všetky budúce požiadavky na doménu automaticky posielal cez HTTPS, aj keď používateľ zadá http://.

**Prečo je to dôležité:** Bez HSTS je prvá návšteva cez HTTP zraniteľná voči SSL stripping útokom — útočník môže presmerovanie na HTTPS zastaviť a odpočúvať komunikáciu. S HSTS prehliadač automaticky upgraduje na HTTPS ešte pred odoslaním požiadavky.

**Príklad z praxe:** GitHub.com posiela hlavičku Strict-Transport-Security: max-age=31536000; includeSubdomains; preload. Vďaka tomu sa doména github.com nachádza v HSTS preload liste, takže prehliadač nikdy nepošle HTTP požiadavku ani pri prvej návšteve.

### Zdroje
- [Strict-Transport-Security header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security) — MDN
- [HTTP Strict Transport Security Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Strict_Transport_Security_Cheat_Sheet.html) — OWASP

---

## SEC3 — Content-Security-Policy (CSP)

**Čo to je:** Kontrola prítomnosti HTTP hlavičky Content-Security-Policy, ktorá definuje, z akých zdrojov môže prehliadač načítať skripty, štýly, obrázky a ďalšie zdroje. CSP je najúčinnejšia obrana proti XSS (Cross-Site Scripting) útokom.

**Prečo je to dôležité:** XSS je jednou z najčastejších webových zraniteľností. Útočník dokáže vložiť škodlivý JavaScript, ktorý ukradne cookies, presmeruje na phishingový web alebo zmení obsah stránky. CSP zabraňuje spusteniu neautorizovaných skriptov tým, že presné definuje povolené zdroje.

**Príklad z praxe:** Cloudflare.com používa striktné CSP s pravidlom script-src 'self', ktoré povolí len skripty z vlastnej domény. Ak útočník vloží externý skript z cudzej domény, prehliadač ho zablokuje, lebo daná doména nie je v povolenom zozname.

### Zdroje
- [Content-Security-Policy (CSP) header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy) — MDN
- [Content Security Policy Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Content_Security_Policy_Cheat_Sheet.html) — OWASP

---

## SEC4 — X-Frame-Options

**Čo to je:** Kontrola prítomnosti HTTP hlavičky X-Frame-Options, ktorá určuje, či sa stránka môže zobraziť v iframe, frame alebo embed elemente. Hlavné hodnoty sú DENY (zakázané vloženie) a SAMEORIGIN (povolené len z rovnakej domény).

**Prečo je to dôležité:** Bez tejto hlavičky môže útočník vložiť vašu stránku do neviditeľného iframe na svojom webe a pomocou clickjackingu nalákať používateľa na kliknutie, ktoré v skutočnosti vykoná akciu na vašom webe — napríklad schválenie platby alebo zmenu hesla.

**Príklad z praxe:** Bankové portály ako mBank používajú X-Frame-Options: DENY, čím zabránia vloženiu prihlasovacieho formulára do cudzieho iframe. Útočník tak nemôže vytvoriť falošnú stránku, ktorá by prekrývala iframe s bankovou aplikáciou.

### Zdroje
- [X-Frame-Options header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Frame-Options) — MDN
- [OWASP Secure Headers Project](https://owasp.org/www-project-secure-headers/) — OWASP

---

## SEC5 — X-Content-Type-Options

**Čo to je:** Kontrola prítomnosti HTTP hlavičky X-Content-Type-Options s hodnotou nosniff. Táto hlavička zabraňuje prehliadaču v MIME type sniffingu — automatickom hádaní typu obsahu, ktoré môže viesť k interpretácii neškodného súboru ako spustiteľného skriptu.

**Prečo je to dôležité:** Bez nosniff hlavičky môže prehliadač interpretovať nahraný textový súbor ako JavaScript a spustiť ho. Útočník tak môže nahrať škodlivý kód zamaskovaný ako obrázok alebo textový súbor, ktorý prehliadač vykoná namiesto zobrazenia.

**Príklad z praxe:** Dropbox.com posiela X-Content-Type-Options: nosniff pri všetkých odpoveďíach. Ak niekto nahrá súbor evil.jpg s obsahom JavaScript kódu, prehliadač ho vďaka nosniff spracuje striktne ako obrázok a skript nespustí.

### Zdroje
- [X-Content-Type-Options header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Content-Type-Options) — MDN
- [OWASP Secure Headers Project](https://owasp.org/www-project-secure-headers/) — OWASP

---

## SEC6 — Referrer-Policy

**Čo to je:** Kontrola prítomnosti HTTP hlavičky Referrer-Policy, ktorá určuje, koľko informácií o URL sa posiela v Referer hlavičke pri navigácii alebo načítaní zdrojov. Odporúčaná hodnota je strict-origin-when-cross-origin alebo no-referrer.

**Prečo je to dôležité:** Bez správnej Referrer-Policy môže URL odoslaná v Referer hlavičke prezradiť citlivé údaje — napríklad tokeny v query parametroch, interné URL adresy alebo informácie o vyhľadávaní. Externé služby (analytika, reklamy) tak môžu získať prístup k údajom, ktoré im nepatria.

**Príklad z praxe:** GitHub.com používa Referrer-Policy: strict-origin-when-cross-origin. Keď kliknete na externý odkaz z privátneho repozitára, cieľový web dostane len https://github.com ako referrer — nie celú URL s názvom privátneho repozitára.

### Zdroje
- [Referrer-Policy header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Referrer-Policy) — MDN
- [OWASP Secure Headers Project](https://owasp.org/www-project-secure-headers/) — OWASP

---

## SEC7 — Permissions-Policy

**Čo to je:** Kontrola prítomnosti HTTP hlavičky Permissions-Policy (predtým Feature-Policy), ktorá obmedzuje prístup stránky a vložených iframe-ov k citlivým API prehliadača ako kamera, mikrofón, geolokácia, platobné API a ďalšie.

**Prečo je to dôležité:** Bez Permissions-Policy môže škodlivý iframe vložený cez reklamu alebo widget tretej strany pristúpiť ku kamere, mikrofónu alebo geolokácii používateľa. Táto hlavička umožňuje explicitne vypnúť API, ktoré web nepotrebuje, a obmedziť tak útočnú plochu.

**Príklad z praxe:** Stripe.com nastavuje Permissions-Policy: camera=(), microphone=(), geolocation=(), čím zakáže prístup ku kamere, mikrofónu aj geolokácii na celom webe. Ak by sa na stránku dostal škodlivý skript, nemohol by aktivovať tieto senzory.

### Zdroje
- [Permissions-Policy header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Permissions-Policy) — MDN
- [Permissions Policy guide](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Permissions_Policy) — MDN

---

## SEC8 — Mixed Content

**Čo to je:** Kontrola, či HTTPS stránka neobsahuje zdroje načítané cez nešifrovaný HTTP protokol (obrázky, skripty, štýly, fonty). Takýto obsah sa nazýva 'mixed content' a narúša bezpečnosť celej stránky.

**Prečo je to dôležité:** Aj keď je hlavná stránka na HTTPS, HTTP zdroje môže útočník v sieti zachytiť a zmeniť. Škodlivý skript načítaný cez HTTP na HTTPS stránke má plný prístup k DOM a cookies. Prehliadače aktívny mixed content (skripty, iframe) blokujú, pasívny (obrázky) označujú varovaním.

**Príklad z praxe:** E-shop na HTTPS načíta produktové obrázky z http://cdn.example.com/product.jpg. Chrome zobrazí v konzole varovanie 'Mixed Content' a ikona zámku zmizne. Po zmene na https://cdn.example.com/product.jpg je stránka plne zabezpečená a zámok sa vráti.

### Zdroje
- [Mixed content](https://developer.mozilla.org/en-US/docs/Web/Security/Defenses/Mixed_content) — MDN
- [Content Security Policy guide](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP) — MDN

---

## SEC9 — Security Warnings

**Čo to je:** Kontrola, či sa v konzole prehliadača nezobrazujú bezpečnostné varovania — napríklad o chýbajúcich bezpečnostných hlavičkách, neplatných certifikátoch, zastaralých TLS verziách, nebezpečných formulároch alebo problémoch s CORS politikou.

**Prečo je to dôležité:** Bezpečnostné varovania v konzole signalizujú potenciálne zraniteľnosti, ktoré útočník môže zneužiť. Ignorovanie varovaní môže viesť k úniku dát, neautorizovanému prístupu alebo kompromitácii celej aplikácie. Bezchybná konzola je znakom dobre zabezpečeného webu.

**Príklad z praxe:** Web s formulárom na HTTP stránke zobrazí v Chrome varovanie o nezabezpečenom cieli formulára. Cloudflare.com má čistú konzolu bez bezpečnostných varovaní, čo svedčí o dôslednom zabezpečení všetkých častí webu.

### Zdroje
- [Security on the web](https://developer.mozilla.org/en-US/docs/Web/Security) — MDN
- [OWASP Secure Headers Project](https://owasp.org/www-project-secure-headers/) — OWASP

---

## SEC10 — Insecure Cookies

**Čo to je:** Kontrola, či cookies majú nastavené bezpečnostné atribúty: Secure (posielanie len cez HTTPS), HttpOnly (neprístupné cez JavaScript) a SameSite (ochrana pred CSRF útokmi). Chýbajúce atribúty vytvárajú vážne bezpečnostné zraniteľnosti.

**Prečo je to dôležité:** Cookie bez Secure atribútu sa posiela aj cez HTTP, kde ju útočník zachytí. Bez HttpOnly ju ukradne XSS útok cez prístup ku cookies v JavaScripte. Bez SameSite=Strict alebo Lax môže útočník vytvoriť CSRF útok — falošný formulár, ktorý automaticky odošle požiadavku s cookie obete.

**Príklad z praxe:** Stripe Dashboard nastavuje session cookie so všetkými troma atribútmi: Set-Cookie: session=abc123; Secure; HttpOnly; SameSite=Lax. Naopak, web bez týchto atribútov riskuje, že útočník cez XSS ukradne session cookie a prevezme účet používateľa.

### Zdroje
- [Set-Cookie header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Set-Cookie) — MDN
- [Secure cookie configuration](https://developer.mozilla.org/en-US/docs/Web/Security/Practical_implementation_guides/Cookies) — MDN

---

## SEC11 — Deprecated APIs

**Čo to je:** Kontrola, či web nepoužíva zastaralé (deprecated) API volania, ktoré prehliadače plánujú alebo už prestali podporovať. Patria sem napríklad synchronný XMLHttpRequest, AppCache, Web SQL a ďalšie zastaralé funkcie.

**Prečo je to dôležité:** Zastaralé API často obsahujú bezpečnostné zraniteľnosti, ktoré už nebudú opravené. Niektoré zastaralé metódy zápisu do DOM môžu byť zneužité na injektáž škodlivého kódu, synchronný XHR blokuje hlavné vlákno. Prehliadače tieto API postupne odstraňujú, čo môže spôsobiť nefunkčnosť webu.

**Príklad z praxe:** Starší web používa zastaralé metódy na vkladanie skriptov do stránky namiesto moderného createElement alebo async/defer atribútov. Chrome tieto volania na pomalých pripojeniach blokuje. GitHub a Cloudflare používajú výlučne moderné API, čím zabezpečujú dlhodobú kompatibilitu.

### Zdroje
- [Security on the web](https://developer.mozilla.org/en-US/docs/Web/Security) — MDN
- [HTTP Headers Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Headers_Cheat_Sheet.html) — OWASP

---

