Bezpečnostné HTTP hlavičky: CSP, HSTS, Permissions-Policy a kompletná konfigurácia Skip to content

Vzdelávanie

Praktické znalosti o frontende, nástrojoch AI a vývoji softvéru.

Bezpečnostné HTTP hlavičky: CSP, HSTS, Permissions-Policy a kompletná konfigurácia

Publikované: 16 min čítania Autor: Security

Bezpečnostné HTTP hlavičky umožňujú serveru odovzdať prehliadaču pravidlá pre načítanie skriptov, používanie rámcov, funkcií zariadenia, referrer údajov, MIME typov a HTTPS. Správna konfigurácia obmedzuje následky útokov XSS, clickjackingu, MIME confusion, XS-Leaks a nechceného cross-origin vkladania.

Nie sú firewallom a neopravujú poškodenú autorizáciu, zraniteľné API, SQL injekcie, uniknuté prihlasovacie údaje ani zastarané závislosti. Bezpečnostné hlavičky sú vrstvou obrany do hĺbky: znižujú útočnú plochu prehliadača a obmedzujú, čo sa môže stať po tom, ako už bola zneužitá iná slabina.

V roku 2026 je užitočné rozlíšiť tri kategórie:

  1. Základné hlavičky, ktoré majú zmysel pre väčšinu webových stránok.
  2. Hlavičky závislé od architektúry, ktoré môžu pri skopírovaní bez analýzy narušiť OAuth, platby, CDN, iframe alebo doručovanie PDF.
  3. Zastarané hlavičky, ktoré by sa nemali zapínať len preto, aby zlepšili skóre zastaraného skenera.

TL;DR: začnite starostlivo navrhnutou Content Security Policy, HSTS po úplnom nasadení HTTPS, X-Content-Type-Options: nosniff, explicitnou Referrer-Policy a zdržanlivou Permissions-Policy. Použite CSP frame-ancestors ako primárny nástroj proti framovaniu a X-Frame-Options ponechajte len ako vrstvu kompatibility. COOP, COEP a CORP nasaďte až po preskúmaní cross-origin integrácií. Odstráňte alebo vypnite X-XSS-Protection, Expect-CT, HPKP a starú hlavičku Report-To.

Odporúčania a kompatibilita boli naposledy overené 23. júla 2026.

Hlavné hlavičky v skratke

Hlavička Typické odporúčanie Čo obmedzuje Používať všade?
Content-Security-Policy politika špecifická pre aplikáciu, prednostne založená na nonce alebo hash XSS, injekcie, neschválené zdroje prostriedkov a framovanie áno pre HTML, po otestovaní
Strict-Transport-Security max-age=31536000; includeSubDomains; preload pridajte až po preskúmaní downgrade na HTTP a obchádzanie chýb certifikátov áno, keď je celá doména pripravená na HTTPS
X-Content-Type-Options nosniff MIME sniffing a niektoré zámeny MIME typov áno
Referrer-Policy strict-origin-when-cross-origin alebo prísnejšie únik cesty URL a parametrov dopytu áno
Permissions-Policy vypnite nepoužívané funkcie ako camera=(), microphone=(), geolocation=() používanie vybraných API prehliadača dokumentmi a rámcami zvyčajne, po otestovaní funkcií
CSP frame-ancestors 'none', 'self' alebo explicitné zdroje clickjacking a nechcené framovanie áno pre HTML dokumenty
X-Frame-Options DENY alebo SAMEORIGIN pre kompatibilitu framovanie v starších implementáciách často, spolu s frame-ancestors
Cross-Origin-Opener-Policy často same-origin, pokiaľ nie sú potrebné vzťahy s vyskakovacími oknami niektoré XS-Leaks a prístup cez window.opener závisí od architektúry
Cross-Origin-Embedder-Policy require-corp alebo credentialless, iba zámerne vkladanie cross-origin prostriedkov bez povolenia nie, nie automaticky
Cross-Origin-Resource-Policy same-origin, same-site alebo cross-origin podľa prostriedku nechcené no-CORS cross-origin čítania závisí od prostriedku
Cache-Control no-store pre vysoko citlivé odpovede; private pre personalizovaný obsah ukladanie v prehliadači a v medziľahlých cache pre citlivé odpovede
Set-Cookie Secure; HttpOnly; SameSite=Lax/Strict podľa potreby krádež a nevhodné cross-site odosielanie cookies pre relačné cookies
Reporting-Endpoints endpoint pre reporty CSP/COOP/COEP pozorovateľnosť politík voliteľné
X-XSS-Protection vynechať alebo nastaviť na 0 zastaraný XSS filter nezapínať
Expect-CT odstrániť zastaraný mechanizmus Certificate Transparency nie
Public-Key-Pins nepoužívať historické pripínanie certifikátov nie

OWASP považuje hlavičky odpovedí za cenné nástroje na spevnenie zabezpečenia, pričom zdôrazňuje, že každá hodnota musí zodpovedať typu odpovede a architektúre aplikácie.

Minimálny východiskový bod

Toto je východisková šablóna, nie univerzálna odpoveď na skopírovanie a vloženie:

Content-Security-Policy: default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; form-action 'self'; img-src 'self' data: https:; font-src 'self'; style-src 'self'; script-src 'self'; connect-src 'self'; upgrade-insecure-requests
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: camera=(), microphone=(), geolocation=()
X-Frame-Options: DENY

Táto politika blokuje inline skripty a štýly, neuvedené zdroje prostriedkov, framovanie, formuláre odosielané na iné zdroje, prístup ku kamere/mikrofónu/geolokácii a navigáciu cez HTTP po uložení HSTS.

Ak stránka používa externé písma, analytiku, mapy, platobné widgety, OAuth, správcov značiek, API tretích strán alebo inline kód, politiku treba prispôsobiť.

1. Content-Security-Policy: najsilnejšia a najnáročnejšia hlavička

Content-Security-Policy definuje, odkiaľ môže prehliadač načítavať skripty, štýly, obrázky, písma, rámce a sieťové spojenia. Správne CSP môže výrazne znížiť dopad XSS a injekcie dát, ale nenahrádza validáciu vstupov, kódovanie výstupov a bezpečné DOM API.

Základné direktívy

Direktíva Účel Bežná východisková hodnota
default-src záložná hodnota pre typy prostriedkov bez vlastnej direktívy 'self'
script-src povolené skripty nonce alebo hashe, voliteľne 'self'
style-src povolené štýly 'self', nonce alebo hashe
img-src obrázky 'self' data: https:
font-src písma 'self' a explicitné CDN zdroje
connect-src Fetch, XHR, WebSocket a EventSource vaše API a explicitné endpointy
frame-src rámce vkladané stránkou iba potrebné zdroje
frame-ancestors ktorí rodičia môžu vkladať túto stránku 'none' alebo 'self'
form-action platné ciele formulárov 'self' alebo explicitné endpointy
base-uri povolené URL pre <base> 'self' alebo 'none'
object-src pluginy <object> a <embed> 'none'
upgrade-insecure-requests prepíše HTTP podzdroje na HTTPS bez hodnoty

Zoznamy povolených verzus striktné CSP

Zoznam povolených domén sa môže stať krehkým. Dôveryhodné CDN môže hostiť množstvo nesúvisiacich súborov a načítavač tretej strany môže dynamicky sťahovať ďalšie závislosti. web.dev odporúča striktné CSP založené na nonce alebo hashoch; strict-dynamic umožňuje, aby skripty načítané dôveryhodným skriptom zdedili dôveru.

Príklad politiky s nonce:

Content-Security-Policy:
  default-src 'self';
  base-uri 'self';
  object-src 'none';
  frame-ancestors 'none';
  form-action 'self';
  script-src 'nonce-{RANDOM_NONCE}' 'strict-dynamic';
  style-src 'self' 'nonce-{RANDOM_NONCE}';
  img-src 'self' data: https:;
  font-src 'self';
  connect-src 'self' https://api.example.com;
  upgrade-insecure-requests

Zodpovedajúce HTML:

<script nonce="{RANDOM_NONCE}">
  window.__APP_CONFIG__ = { apiUrl: "https://api.example.com" };
</script>

Nonce musí byť nepredvídateľný, jedinečný pre každú HTML odpoveď, prítomný v hlavičke aj v dôveryhodných prvkoch a generovaný serverom. Konštantný nonce uložený v konfigurácii neposkytuje zamýšľanú ochranu. Pre statické stránky, ktoré nedokážu vygenerovať novú hodnotu pri každej požiadavke, môžu byť praktickejšie hashe.

Vyhnite sa unsafe-inline a unsafe-eval

'unsafe-inline' v script-src povoľuje inline JavaScript a výrazne oslabuje ochranu pred XSS. 'unsafe-eval' umožňuje API, ktoré vykonávajú reťazce ako kód, vrátane eval() a konštruktora Function.

Nepridávajte ich len na to, aby ste umlčali porušenia v konzole. Namiesto toho:

  1. presuňte inline kód do externých súborov;
  2. použite nonce alebo hash;
  3. identifikujte závislosť, ktorá vyžaduje eval;
  4. hľadajte iné zostavenie alebo konfiguráciu knižnice.

Trusted Types

Politika ako:

Content-Security-Policy: require-trusted-types-for 'script'; trusted-types app-policy

môže vyžadovať typované hodnoty na vybraných DOM XSS miestach, ako je innerHTML. Od februára 2026 je require-trusted-types-for dostupné v aktuálnych hlavných prehliadačoch, hoci staršie vydania ho nemusia podporovať.

Trusted Types je pokročilá obrana. Aplikácia musí definovať bezpečné transformačné politiky a frameworky aj závislosti musia byť kompatibilné. Samotné pridanie hlavičky nestačí.

Začnite s Report-Only

Bezpečnejšie zavedenie začína s:

Content-Security-Policy-Report-Only: default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'none'; report-to csp-endpoint
Reporting-Endpoints: csp-endpoint="https://example.com/security/csp-reports"

Content-Security-Policy-Report-Only hlási porušenia bez blokovania prostriedkov, čo umožňuje identifikovať chýbajúce zdroje a narušené toky pred vynútením. Reporting-Endpoints nahrádza zastaranú hlavičku Report-To a pre súčasné nasadenia by mala mať prednosť.

Reportovací endpoint by mal vynucovať limity veľkosti payloadu, obmedzovanie počtu požiadaviek, bezpečné logovanie, kódovanie výstupov a krátku dobu uchovávania určenú na konkrétny účel. CSP reporty môžu obsahovať URL a podrobnosti o prostriedkoch.

2. Strict-Transport-Security: HTTPS bez možnosti downgradu

HSTS oznamuje prehliadaču, že hostiteľa treba kontaktovať iba cez HTTPS. Po uložení prehliadač povyšuje budúce pokusy o HTTP a bráni používateľom obísť niektoré chyby certifikátov.

Strict-Transport-Security: max-age=31536000; includeSubDomains
  • max-age=31536000 ukladá politiku na jeden rok.
  • includeSubDomains pokrýva subdomény.
  • preload signalizuje zámer pridať sa do preload zoznamu prehliadača.

Nezačínajte s preload

Nesprávne nasadenie HSTS môže zablokovať legitímnych používateľov. Stará subdoména iba s HTTP, expirovaný certifikát alebo služba tretej strany pod vašou doménou môžu spraviť includeSubDomains a dlhý max-age nebezpečnými.

Opatrné zavedenie môže použiť:

5 minutes → 1 day → 1 week → 1 month → 1 year

V každej fáze otestujte apex doménu, aktívne subdomény, wildcard a SAN certifikáty, zastarané služby, administračné panely, API a partnerské endpointy.

HSTS preload vyžaduje platný certifikát, presmerovania z HTTP na HTTPS, dostatočne dlhý max-age, includeSubDomains a token preload. Odstránenie môže trvať týždne, pretože zoznam sa dodáva priamo v prehliadačoch.

3. X-Content-Type-Options: zastavte hádanie MIME typov

X-Content-Type-Options: nosniff

Toto hovorí prehliadaču, aby rešpektoval deklarovaný Content-Type namiesto toho, aby si odpoveď vykladal ako iný typ. Skripty a štýly môžu byť zablokované, keď ich MIME typ nezodpovedá očakávanému.

Nenahrádza správnu konfiguráciu servera. Odpovede stále potrebujú presné hodnoty:

Content-Type: text/html; charset=utf-8
Content-Type: text/css; charset=utf-8
Content-Type: application/javascript; charset=utf-8
Content-Type: application/json; charset=utf-8
Content-Type: image/avif

Toto je obzvlášť dôležité pri používateľských nahrávaniach, endpointoch na sťahovanie, dynamicky generovaných súboroch, objektovom úložisku, CDN a chybových odpovediach, ktoré môžu vrátiť HTML namiesto JSON.

4. Referrer-Policy: obmedzte únik URL

Referrer-Policy riadi, koľko z URL aktuálnej stránky sa môže odoslať v hlavičke Referer pri požiadavke na iný prostriedok.

Rozumné predvolené nastavenie je:

Referrer-Policy: strict-origin-when-cross-origin

Odosiela celú URL pri same-origin požiadavkách, iba zdroj (origin) pri cross-origin HTTPS požiadavkách a žiadny referrer pri downgrade z HTTPS na HTTP.

Prísnejšie alternatívy zahŕňajú:

Referrer-Policy: no-referrer

alebo:

Referrer-Policy: same-origin

Voľba môže ovplyvniť analytiku, affiliate systémy a poskytovateľov platieb. Tajomstvá, tokeny, e-mailové adresy a osobné údaje by sa v prvom rade vôbec nemali umiestňovať do URL.

5. Ochrana pred clickjackingom: frame-ancestors a X-Frame-Options

Najflexibilnejším nástrojom je CSP:

Content-Security-Policy: frame-ancestors 'none'

alebo:

Content-Security-Policy: frame-ancestors 'self' https://portal.partner.example

frame-ancestors definuje, ktorí rodičia môžu vložiť dokument do <frame>, <iframe>, <object> alebo <embed>.

Pre kompatibilitu pridajte:

X-Frame-Options: DENY

alebo:

X-Frame-Options: SAMEORIGIN

MDN odporúča frame-ancestors pre moderné nasadenia, pretože je výraznejšie. ALLOW-FROM je zastarané a môže spôsobiť, že aktuálne prehliadače hlavičku ignorujú. X-Frame-Options musí byť HTTP hlavička; verzia cez <meta http-equiv> nemá žiadny účinok.

6. Permissions-Policy: vypnite funkcie, ktoré stránka nepoužíva

Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=()

Hlavička riadi prístup dokumentu a jeho rámcov k vybraným funkciám prehliadača vrátane kamery, mikrofónu a geolokácie.

Povoľte aktuálny zdroj (origin):

Permissions-Policy: geolocation=(self), camera=(), microphone=()

Alebo povoľte explicitný zdroj:

Permissions-Policy: geolocation=(self "https://maps.example")

Nekopírujte obrovský zoznam všetkých známych direktív. Jednotlivé direktívy majú rôznu podporu v prehliadačoch a niektoré zostávajú experimentálne. Identifikujte funkcie, ktoré aplikácia používa, a potom explicitne vypnite relevantné nepoužívané.

7. COOP, COEP a CORP: cross-origin izolácia nie je univerzálnym predvolením

Tieto hlavičky spolu súvisia, ale riešia rôzne problémy.

Cross-Origin-Opener-Policy

Cross-Origin-Opener-Policy: same-origin

COOP riadi, či dokumenty otvorené navigáciou alebo cez window.open() zdieľajú skupinu prehliadacieho kontextu. same-origin oddeľuje dokument od cross-origin otváračov a zmierňuje niektoré XS-Leaks.

Môže narušiť OAuth vyskakovacie okná, platobné okná a integrácie závisiace od window.opener. V niektorých prípadoch je vhodnejšie toto:

Cross-Origin-Opener-Policy: same-origin-allow-popups

Cross-Origin-Embedder-Policy

Cross-Origin-Embedder-Policy: require-corp

COEP vyžaduje, aby cross-origin prostriedky no-cors udelili povolenie cez CORP alebo aby boli načítané s CORS. Chýbajúce hlavičky môžu blokovať obrázky, písma, skripty, rámce a ďalšie prostriedky tretích strán.

Alternatívou je:

Cross-Origin-Embedder-Policy: credentialless

Toto povoľuje niektoré prostriedky no-cors bez explicitného CORP, pričom odstraňuje prihlasovacie údaje ako cookies.

Cross-Origin-Resource-Policy

Cross-Origin-Resource-Policy: same-origin

CORP je politika na samotnom prostriedku a môže používať:

  • same-origin,
  • same-site,
  • cross-origin.

Nie je náhradou za CORS. MDN tiež dokumentuje problém v prehliadači Chrome týkajúci sa čiastočného vykresľovania PDF pri niektorých nasadeniach CORP, takže hlavičku by sa nemalo aplikovať globálne bez testov.

Dvojica:

Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp

umožňuje cross-origin izoláciu vyžadovanú vybranými pokročilými API vrátane úplného prístupu k SharedArrayBuffer. Nenasadzujte ju len kvôli skóre skenera.

8. Bezpečné cookies a ukladanie do cache

Set-Cookie a Cache-Control sa nie vždy uvádzajú ako bezpečnostné hlavičky, ale priamo chránia relácie a citlivé údaje.

Relačné cookie

Set-Cookie: __Host-session=RANDOM_VALUE; Path=/; Secure; HttpOnly; SameSite=Lax
  • Secure obmedzuje prenos na HTTPS.
  • HttpOnly zabraňuje prístupu cez JavaScript.
  • SameSite obmedzuje cross-site odosielanie.
  • __Host- vyžaduje Secure, Path=/ a žiadny Domain, čím pevnejšie viaže cookie na hostiteľa.

SameSite=Strict je silnejšie, ale môže narušiť návraty od poskytovateľov prihlásenia alebo platieb. SameSite=None vyžaduje Secure a malo by sa používať iba pre skutočne cross-site cookie.

Citlivé odpovede

Cache-Control: no-store

Toto žiada súkromné aj zdieľané cache, aby odpoveď neukladali. Personalizovaný obsah, ktorý sa môže ukladať v prehliadači, ale nie u medziľahlých subjektov, môže použiť:

Cache-Control: private, no-cache

MDN odporúča explicitne označiť personalizované odpovede ako private, aby sa predišlo náhodnému zdieľanému ukladaniu do cache.

9. Obmedzte odhaľovanie technológií

Hlavičky ako:

Server: nginx/1.24.0
X-Powered-By: PHP/8.4
X-AspNet-Version: 4.0.30319

uľahčujú vytváranie odtlačku (fingerprinting). Ich odstránenie neskryje technologický stack pred odhodlaným útočníkom, ale zabráni priamemu odhaleniu verzie.

  • odstráňte X-Powered-By;
  • vypnite hlavičky s verziami frameworkov;
  • obmedzte podrobnosti v Server;
  • nezverejňujte zámerne falošnú verziu;
  • nezamieňajte skrývanie za záplatovanie.

OWASP odporúča odstrániť X-Powered-By a obmedziť Server, pričom poznamenáva, že technológie sa dajú odvodiť aj inými spôsobmi.

10. Zastarané hlavičky a zavádzajúce rady

X-XSS-Protection

Nezapínajte:

X-XSS-Protection: 1; mode=block

OWASP varuje, že zastarané XSS filtre môžu vytvárať zraniteľnosti v inak bezpečných stránkach. Hlavičku vynechajte alebo ju explicitne vypnite:

X-XSS-Protection: 0

Namiesto toho použite CSP, kódovanie výstupov a bezpečné API.

Expect-CT

Expect-CT je v praxi zastarané, pretože súčasní klienti vyžadujú Certificate Transparency pre moderné certifikáty. MDN ho opisuje ako do veľkej miery zastarané od júna 2021.

Public-Key-Pins

HPKP by sa nemalo nasadzovať. Nesprávny pin by mohol na dlhý čas zablokovať používateľov a hlavička bola z moderných prehliadačov odstránená. Uprednostnite správne TLS, automatickú obnovu, CAA, monitorovanie certifikátov a starostlivo preskúmaný HSTS preload.

Report-To

Staré:

Report-To: { ... }

je zastarané. Použite:

Reporting-Endpoints: csp="https://example.com/reports/csp"

Access-Control-Allow-Origin: *

CORS nie je balík hlavičiek na spevnenie zabezpečenia, ktorý sa pridáva globálne. Access-Control-Allow-Origin uvoľňuje Same-Origin Policy. Odpovede API s prihlasovacími údajmi nemôžu bezpečne kombinovať zástupný znak * s autentifikovaným cross-origin prístupom. Povoľte iba potrebné zdroje a overte ich na strane servera.

11. Príklady konfigurácie servera

Nginx

add_header Content-Security-Policy "default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; form-action 'self'; img-src 'self' data: https:; style-src 'self'; script-src 'self'; connect-src 'self'; upgrade-insecure-requests" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
add_header X-Frame-Options "DENY" always;

always je dôležité, pretože zachováva hlavičky pri chybových a neštandardných stavových odpovediach.

Apache

<IfModule mod_headers.c>
  Header always set Content-Security-Policy "default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; form-action 'self'; img-src 'self' data: https:; style-src 'self'; script-src 'self'; connect-src 'self'; upgrade-insecure-requests"
  Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
  Header always set X-Content-Type-Options "nosniff"
  Header always set Referrer-Policy "strict-origin-when-cross-origin"
  Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
  Header always set X-Frame-Options "DENY"
</IfModule>

PHP

<?php

header("Content-Security-Policy: default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; form-action 'self'; img-src 'self' data: https:; style-src 'self'; script-src 'self'; connect-src 'self'; upgrade-insecure-requests");
header("Strict-Transport-Security: max-age=31536000; includeSubDomains");
header("X-Content-Type-Options: nosniff");
header("Referrer-Policy: strict-origin-when-cross-origin");
header("Permissions-Policy: camera=(), microphone=(), geolocation=()");
header("X-Frame-Options: DENY");

Hlavičky sa musia odoslať pred telom odpovede. Pre každú požiadavku vygenerujte samostatne kryptograficky náhodný nonce.

Node.js / Express

app.use((req, res, next) => {
  res.setHeader(
    "Content-Security-Policy",
    "default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; form-action 'self'; img-src 'self' data: https:; style-src 'self'; script-src 'self'; connect-src 'self'; upgrade-insecure-requests"
  );
  res.setHeader(
    "Strict-Transport-Security",
    "max-age=31536000; includeSubDomains"
  );
  res.setHeader("X-Content-Type-Options", "nosniff");
  res.setHeader("Referrer-Policy", "strict-origin-when-cross-origin");
  res.setHeader(
    "Permissions-Policy",
    "camera=(), microphone=(), geolocation=()"
  );
  res.setHeader("X-Frame-Options", "DENY");
  res.removeHeader("X-Powered-By");
  next();
});

Stránka používajúca CDN, WebSockety, OAuth, platby alebo mapy bude potrebovať širšie, ale stále explicitné CSP.

12. Proces zavádzania, ktorý predchádza výpadkom

Inventarizácia

Vypíšte všetky zdroje skriptov, štýlov, písem a obrázkov; API a WebSocket endpointy; iframe; OAuth/platobné vyskakovacie okná; CDN prostriedky; používateľské nahrávania; HSTS subdomény a funkcie prehliadača, ktoré aplikácia používa.

Pozorovanie

  • spustite CSP v režime Report-Only;
  • zbierajte reporty a porušenia z konzoly prehliadača;
  • otestujte každú kritickú používateľskú cestu;
  • zahrňte mobilné a podporované prehliadače;
  • skontrolujte chybové stránky, presmerovania a statické prostriedky.

Vynucujte postupne

  • začnite s object-src, base-uri, frame-ancestors a form-action;
  • prejdite na statické prostriedky;
  • striktné script-src vynucujte ako posledné;
  • postupne zvyšujte HSTS max-age;
  • COOP/COEP testujte samostatne oproti vyskakovacím oknám a cross-origin integráciám.

Sledujte regresie

CI testy by mali načítať reprezentatívne URL, zisťovať duplicitné alebo konfliktné hlavičky, potvrdzovať MIME typy, odhaľovať náhodné odstránenie CSP/HSTS a spúšťať end-to-end toky prihlásenia a platieb.

13. Ako testovať hlavičky

Skontrolujte odpoveď priamo:

curl -I https://example.com/

Sledujte presmerovania:

curl -IL https://example.com/

Preskúmajte konkrétny prostriedok:

curl -I https://example.com/assets/app.js

Overte hlavičky na domovskej stránke, pri prihlásení, na odpovediach 404 a 500; potvrďte, že CSP nie je duplikované s konfliktnými politikami; uistite sa, že HSTS sa odosiela iba cez HTTPS; skontrolujte MIME typy; a overte, že CDN alebo reverzný proxy hlavičky neodstránili.

Bezplatný POLPROG Security Headers Inspector kontroluje HSTS, CSP, ochranu pred framovaním a ďalšie nástroje. Použite DNS & SSL Inspector na kontrolu certifikátov a DNS a Website Health Check na širšie posúdenie SEO, výkonu, prístupnosti a bezpečnosti.

Kontrolný zoznam nasadenia

CSP

  • Reštriktívne default-src.
  • object-src 'none'.
  • Obmedzené base-uri.
  • frame-ancestors zodpovedá skutočnému modelu vkladania.
  • form-action obmedzuje ciele formulárov.
  • Inline kód používa nonce alebo hash, keď je to potrebné.
  • Nonce je jedinečný pre každú odpoveď.
  • Žiadne neopodstatnené 'unsafe-inline'.
  • Žiadne neopodstatnené 'unsafe-eval'.
  • Politika najprv otestovaná v režime Report-Only.
  • Reportovací endpoint má limity počtu požiadaviek a obmedzené uchovávanie.

HTTPS a HSTS

  • Každá stránka a prostriedok funguje cez HTTPS.
  • HTTP presmerúva priamo na HTTPS.
  • Certifikáty sú monitorované.
  • Všetky subdomény sú zinventarizované.
  • max-age zvyšované po fázach.
  • includeSubDomains je bezpečné.
  • preload pridané až po preskúmaní dôsledkov.

Ďalšie nástroje

  • X-Content-Type-Options: nosniff.
  • Správny Content-Type na každej odpovedi.
  • Explicitná Referrer-Policy.
  • Permissions-Policy vypína nepoužívané funkcie.
  • Žiadne ALLOW-FROM v X-Frame-Options.
  • COOP nenarušuje OAuth ani platby.
  • COEP neblokuje potrebné prostriedky tretích strán.
  • CORP zodpovedá modelu zdieľania každého prostriedku.
  • Relačné cookies používajú Secure, HttpOnly a vhodné SameSite.
  • Citlivé odpovede používajú správny Cache-Control.
  • Hlavičky s verziami technológií sú odstránené.
  • X-XSS-Protection chýba alebo je vypnuté.
  • Expect-CT, HPKP a staré Report-To sú odstránené.

Záver

Pre väčšinu firemných webových stránok a webových aplikácií je správne poradie takéto:

  1. Správne HTTPS, MIME typy a bezpečné cookies.
  2. CSP špecifické pre aplikáciu, zavedené cez Report-Only.
  3. HSTS nasadené po fázach.
  4. nosniff, Referrer-Policy, Permissions-Policy a ochrana pred framovaním.
  5. COOP, COEP a CORP iba vtedy, keď je cross-origin model pochopený.
  6. Odstránenie zastaraných hlavičiek a hlavičiek unikajúcich informácie.

Najlepšia sada bezpečnostných hlavičiek nie je tá najdlhšia. Je to najmenšia politika, ktorá presne zodpovedá aplikácii, prežije testovanie kritických ciest a zostáva monitorovaná po každom nasadení.

HTTP Headers Security CSP HSTS Web Security

Často kladené otázky

Zabránia bezpečnostné hlavičky každému útoku?

Nie. Obmedzujú správanie prehliadača a zmierňujú vybrané triedy zraniteľností, ale nenahrádzajú autorizáciu, validáciu, záplatovanie závislostí, správu tajomstiev ani bezpečnostné testovanie.

Ktorá hlavička je najdôležitejšia?

Pre HTML stránky má dobre navrhnuté CSP najväčší potenciál. Zároveň sa dá ľahko pokaziť, preto by malo začínať v režime Report-Only.

Môžem skopírovať hotové CSP?

Použite ho iba ako východiskový bod. Politika musí odrážať skripty, API, písma, rámce, formuláre a integrácie, ktoré skutočná aplikácia používa.

Je X-Frame-Options stále potrebné?

CSP frame-ancestors je moderný, flexibilný nástroj. DENY alebo SAMEORIGIN môžu zostať ako vrstva kompatibility. Nepoužívajte ALLOW-FROM.

Dá sa HSTS nastaviť hneď na dva roky?

Technicky áno, ale je to riskantné, kým sa neskontroluje každá subdoména, certifikát a zastaraná služba. Zvyšujte max-age postupne.

Mám používať HSTS preload?

Iba keď je celá doména a všetky subdomény trvalo pripravené na HTTPS. Odstránenie preloadovanej položky je pomalšie než vymazanie HSTS politiky uloženej v cache prehliadača.

Funguje Permissions Policy rovnako v každom prehliadači?

Nie. Jednotlivé direktívy majú rôznu úroveň podpory a niektoré sú experimentálne. Otestujte funkcie, ktoré skutočne konfigurujete.

Majú byť COEP a CORP zapnuté globálne?

Nie automaticky. Môžu blokovať obrázky, písma, skripty, iframe a PDF súbory tretích strán. Najprv zinventarizujte cross-origin prostriedky a preskúmajte ich správanie v rámci CORS/CORP.

Prečo skener penalizuje neprítomnosť X-XSS-Protection?

Niektoré skenery používajú zastarané pravidlá. Aktuálne odporúčanie OWASP je vynechať ju alebo nastaviť na 0.

Môže CSP pokaziť webovú stránku?

Áno. Príliš reštriktívna politika môže blokovať skripty, štýly, písma, API, prihlásenie a platby. Začnite s Content-Security-Policy-Report-Only.

Majú chybové stránky obsahovať tieto hlavičky?

Áno, tam kde je to relevantné pre daný typ odpovede. HTML chybové stránky by nemali stratiť CSP, nosniff, Referrer-Policy ani ochranu pred framovaním.

Zdroje a poznámky pod čiarou

  1. OWASP Cheat Sheet Series, HTTP Security Response Headersdoplňujúci materiál
  2. MDN Web Docs, Content Security Policydoplňujúci materiál
  3. web.dev, Mitigate cross-site scripting with a strict Content Security Policydoplňujúci materiál
  4. MDN Web Docs, CSP require-trusted-types-fordoplňujúci materiál
  5. MDN Web Docs, Content-Security-Policy-Report-Onlydoplňujúci materiál
  6. MDN Web Docs, Reporting-Endpointsdoplňujúci materiál
  7. MDN Web Docs, Strict-Transport-Securitydoplňujúci materiál
  8. OWASP Cheat Sheet Series, HTTP Strict Transport Securitydoplňujúci materiál
  9. HSTS Preload, Submission Requirementsdoplňujúci materiál
  10. MDN Web Docs, X-Content-Type-Optionsdoplňujúci materiál
  11. MDN Web Docs, Referrer-Policydoplňujúci materiál
  12. MDN Web Docs, CSP frame-ancestorsdoplňujúci materiál
  13. MDN Web Docs, X-Frame-Optionsdoplňujúci materiál
  14. MDN Web Docs, Permissions-Policydoplňujúci materiál
  15. MDN Web Docs, Cross-Origin-Opener-Policydoplňujúci materiál
  16. MDN Web Docs, Cross-Origin-Embedder-Policydoplňujúci materiál
  17. MDN Web Docs, Cross-Origin Resource Policydoplňujúci materiál
  18. MDN Web Docs, Set-Cookiedoplňujúci materiál
  19. MDN Web Docs, Cache-Controldoplňujúci materiál
  20. MDN Web Docs, Expect-CTdoplňujúci materiál
  21. POLPROG, Security Headers Inspectordoplňujúci materiál

Bolo to užitočné?

Získavajte nové články e-mailom

Jeden krátky e-mail na každý nový článok Vzdelávania. Žiadny spam, odhlásenie jedným kliknutím.

Váš e-mail používame len na zasielanie nových článkov. Žiadne zdieľanie s tretími stranami.

Späť na Vzdelávanie