Bezpečnostní HTTP hlavičky: CSP, HSTS, Permissions-Policy a kompletní konfigurace Skip to content

Znalostní báze

Praktické znalosti o frontendu, nástrojích AI a vývoji softwaru.

Bezpečnostní HTTP hlavičky: CSP, HSTS, Permissions-Policy a kompletní konfigurace

Publikováno: 16 min čtení Autor: Security

Bezpečnostní HTTP hlavičky umožňují serveru předat prohlížeči pravidla pro načítání skriptů, použití rámců, funkcí zařízení, referrer informací, MIME typů a HTTPS. Správná konfigurace omezuje dopad některých útoků XSS, clickjackingu, MIME confusion, XS-Leaks a nechtěného cross-origin vkládání.

Nejsou firewallem a neopraví narušenou autorizaci, zranitelná API, SQL injection, uniklé přihlašovací údaje ani zastaralé závislosti. Bezpečnostní hlavičky jsou vrstvou hloubkové obrany: zmenšují prostor pro útok v prohlížeči a omezují, co se může stát poté, co už byla zneužita jiná slabina.

V roce 2026 je užitečné rozlišovat tři kategorie:

  1. Základní hlavičky, které dávají smysl pro většinu webů.
  2. Hlavičky závislé na architektuře, které mohou při zkopírování bez analýzy rozbít OAuth, platby, CDN, iframy nebo doručování PDF.
  3. Zastaralé hlavičky, které by se neměly zapínat jen kvůli zlepšení skóre v zastaralém skeneru.

TL;DR: začněte pečlivě navrženou Content Security Policy, HSTS až po plném nasazení HTTPS, X-Content-Type-Options: nosniff, explicitní Referrer-Policy a zdrženlivou Permissions-Policy. Použijte CSP frame-ancestors jako hlavní ochranu proti rámování a X-Frame-Options ponechte jen jako vrstvu kompatibility. COOP, COEP a CORP nasazujte až po prověření cross-origin integrací. Odstraňte nebo vypněte X-XSS-Protection, Expect-CT, HPKP a starou hlavičku Report-To.

Doporučení a kompatibilita byly naposledy ověřeny 23. července 2026.

Hlavní hlavičky ve zkratce

Hlavička Typické doporučení Co omezuje Používat všude?
Content-Security-Policy politika specifická pro aplikaci, nejlépe založená na nonce nebo hashích XSS, injekce, neschválené originy zdrojů a rámování ano pro HTML, po otestování
Strict-Transport-Security max-age=31536000; includeSubDomains; preload přidávejte až po prověření downgrade na HTTP a obcházení chyb certifikátů ano, když je celá doména připravená na HTTPS
X-Content-Type-Options nosniff MIME sniffing a některé záměny MIME ano
Referrer-Policy strict-origin-when-cross-origin nebo přísnější únik cesty a dotazu z URL ano
Permissions-Policy vypnout nepoužívané funkce, jako je camera=(), microphone=(), geolocation=() používání vybraných API prohlížeče dokumenty a rámy obvykle, po otestování funkcí
CSP frame-ancestors 'none', 'self' nebo explicitní originy clickjacking a nežádoucí rámování ano pro HTML dokumenty
X-Frame-Options DENY nebo SAMEORIGIN kvůli kompatibilitě rámování ve starších implementacích často, spolu s frame-ancestors
Cross-Origin-Opener-Policy často same-origin, pokud nejsou potřeba vztahy mezi vyskakovacími okny některé XS-Leaks a přístup přes window.opener závisí na architektuře
Cross-Origin-Embedder-Policy require-corp nebo credentialless, jen záměrně vkládání cross-origin zdrojů bez povolení ne, ne automaticky
Cross-Origin-Resource-Policy same-origin, same-site nebo cross-origin podle zdroje nežádoucí cross-origin čtení bez CORS závisí na zdroji
Cache-Control no-store pro vysoce citlivé odpovědi; private pro personalizovaný obsah ukládání v prohlížeči a mezilehlých cache pro citlivé odpovědi
Set-Cookie Secure; HttpOnly; SameSite=Lax/Strict podle situace krádež a nevhodné cross-site odesílání cookies pro relační cookies
Reporting-Endpoints endpoint pro reporty CSP/COOP/COEP pozorovatelnost politik volitelné
X-XSS-Protection vynechat nebo nastavit na 0 zastaralý XSS filtr nezapínat
Expect-CT odstranit zastaralý mechanismus Certificate Transparency ne
Public-Key-Pins nepoužívat historický pinning certifikátů ne

OWASP považuje hlavičky odpovědí za cenné prostředky pro zpevnění zabezpečení, ale zdůrazňuje, že každá hodnota musí odpovídat typu odpovědi a architektuře aplikace.

Minimální výchozí bod

Toto je výchozí šablona, nikoli univerzální řešení k okopírování:

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

Tato politika blokuje inline skripty a styly, neuvedené originy zdrojů, rámování, formuláře odesílané na jiné originy, přístup ke kameře/mikrofonu/geolokaci a navigaci přes HTTP poté, co bylo uloženo HSTS.

Pokud web používá externí fonty, analytiku, mapy, platební widgety, OAuth, správce značek, API třetích stran nebo inline kód, je nutné politiku přizpůsobit.

1. Content-Security-Policy: nejsilnější a nejnáročnější hlavička

Content-Security-Policy určuje, odkud smí prohlížeč načítat skripty, styly, obrázky, fonty, rámy a síťová spojení. Správná CSP může výrazně omezit dopad XSS a injekce dat, ale nenahrazuje validaci vstupů, kódování výstupů a bezpečná DOM API.

Základní direktivy

Direktiva Účel Běžná výchozí hodnota
default-src záloha pro typy zdrojů bez vlastní direktivy 'self'
script-src povolené skripty nonce nebo hashe, volitelně 'self'
style-src povolené styly 'self', nonce nebo hashe
img-src obrázky 'self' data: https:
font-src fonty 'self' a explicitní originy CDN
connect-src Fetch, XHR, WebSocket a EventSource vaše API a explicitní endpointy
frame-src rámy vkládané stránkou pouze potřebné originy
frame-ancestors kteří rodiče smějí vložit tuto stránku 'none' nebo 'self'
form-action platné cíle formulářů 'self' nebo explicitní endpointy
base-uri povolené URL <base> 'self' nebo 'none'
object-src pluginy <object> a <embed> 'none'
upgrade-insecure-requests přepsat HTTP podřízené zdroje na HTTPS bez hodnoty

Allowlisty versus striktní CSP

Allowlist domén se může stát křehkým. Důvěryhodná CDN může hostovat mnoho nesouvisejících souborů a načítač třetí strany může dynamicky přitáhnout další závislosti. web.dev doporučuje striktní CSP založenou na nonce nebo hashích; strict-dynamic umožňuje, aby skripty načtené důvěryhodným skriptem zdědily důvěru.

Pří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

Odpovídající HTML:

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

Nonce musí být nepředvídatelný, jedinečný pro každou HTML odpověď, přítomný v hlavičce i v důvěryhodných prvcích a generovaný serverem. Konstantní nonce uložený v konfiguraci neposkytuje zamýšlenou ochranu. Pro statické stránky, které nedokážou generovat novou hodnotu na každý požadavek, mohou být praktičtější hashe.

Vyhněte se unsafe-inline a unsafe-eval

'unsafe-inline' v script-src povoluje inline JavaScript a výrazně oslabuje ochranu proti XSS. 'unsafe-eval' zapíná API, která spouštějí řetězce jako kód, včetně eval() a konstruktoru Function.

Nepřidávejte je jen kvůli umlčení hlášení v konzoli. Místo toho:

  1. přesuňte inline kód do externích souborů;
  2. použijte nonce nebo hash;
  3. identifikujte závislost vyžadující eval;
  4. hledejte jinou konfiguraci sestavení nebo knihovny.

Trusted Types

Politika jako:

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

může vyžadovat typované hodnoty ve vybraných DOM XSS cílech, jako je innerHTML. Od února 2026 je require-trusted-types-for dostupná v aktuálních hlavních prohlížečích, i když starší verze ji nemusí podporovat.

Trusted Types je pokročilá obrana. Aplikace musí definovat bezpečné transformační politiky a frameworky i závislosti musí být kompatibilní. Samotné přidání hlavičky nestačí.

Začněte s Report-Only

Bezpečnější zavádění začíná takto:

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ásí porušení, aniž by blokovala zdroje, což umožňuje identifikovat chybějící originy a rozbité toky před vynucováním. Reporting-Endpoints nahrazuje zastaralou hlavičku Report-To a pro současná nasazení by měla být upřednostňována.

Reportovací endpoint by měl vynucovat limity velikosti payloadu, omezování rychlosti (rate limiting), bezpečné logování, kódování výstupů a krátkou, účelově vázanou dobu uchovávání. CSP reporty mohou obsahovat URL a detaily o zdrojích.

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

HSTS říká prohlížeči, že host smí být kontaktován pouze přes HTTPS. Po uložení prohlížeč povyšuje budoucí pokusy o HTTP a brání uživatelům v obcházení některých chyb certifikátů.

Strict-Transport-Security: max-age=31536000; includeSubDomains
  • max-age=31536000 ukládá politiku na jeden rok.
  • includeSubDomains pokrývá subdomény.
  • preload značí záměr připojit se k preload seznamu prohlížečů.

Nezačínejte s preload

Chybné nasazení HSTS může zablokovat legitimní uživatele. Stará subdoména pouze na HTTP, prošlý certifikát nebo služba třetí strany pod vaší doménou mohou učinit includeSubDomains a dlouhý max-age nebezpečnými.

Opatrné zavádění může použít:

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

V každé fázi otestujte apex doménu, aktivní subdomény, wildcard a SAN certifikáty, zastaralé služby, administrační panely, API a partnerské endpointy.

HSTS preload vyžaduje platný certifikát, přesměrování z HTTP na HTTPS, dostatečně dlouhý max-age, includeSubDomains a token preload. Odebrání může trvat týdny, protože seznam je distribuován uvnitř prohlížečů.

3. X-Content-Type-Options: zastavte hádání MIME

X-Content-Type-Options: nosniff

Tím se prohlížeči říká, aby respektoval deklarovaný Content-Type, místo aby odpověď interpretoval jako jiný typ. Skripty a styly mohou být blokovány, pokud jejich MIME typ neodpovídá očekávanému.

Nenahrazuje správnou konfiguraci serveru. Odpovědi stále potřebují přesné 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

To je obzvláště důležité u nahrávání od uživatelů, stahovacích endpointů, dynamicky generovaných souborů, objektových úložišť, CDN a chybových odpovědí, které mohou vracet HTML místo JSON.

4. Referrer-Policy: omezte únik URL

Referrer-Policy řídí, jak velká část URL aktuální stránky smí být odeslána v hlavičce Referer při vyžádání jiného zdroje.

Rozumné výchozí nastavení je:

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

Posílá plnou URL pro same-origin požadavky, pouze origin pro cross-origin HTTPS požadavky a žádný referrer při downgradu z HTTPS na HTTP.

Přísnější alternativy zahrnují:

Referrer-Policy: no-referrer

nebo:

Referrer-Policy: same-origin

Volba může ovlivnit analytiku, affiliate systémy a poskytovatele plateb. Tajné údaje, tokeny, e-mailové adresy a osobní data by v URL neměly být vůbec uváděny.

5. Ochrana proti clickjackingu: frame-ancestors a X-Frame-Options

Nejpružnějším prostředkem je CSP:

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

nebo:

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

frame-ancestors určuje, kteří rodiče smějí vložit dokument do <frame>, <iframe>, <object> nebo <embed>.

Kvůli kompatibilitě přidejte:

X-Frame-Options: DENY

nebo:

X-Frame-Options: SAMEORIGIN

MDN doporučuje frame-ancestors pro moderní nasazení, protože je výraznější. ALLOW-FROM je zastaralá a může způsobit, že aktuální prohlížeče hlavičku ignorují. X-Frame-Options musí být HTTP hlavička; verze přes <meta http-equiv> nemá žádný účinek.

6. Permissions-Policy: vypněte funkce, které web nepoužívá

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

Hlavička řídí přístup dokumentu a jeho rámů k vybraným funkcím prohlížeče, včetně kamery, mikrofonu a geolokace.

Povolte aktuální origin:

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

Nebo povolte explicitní origin:

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

Nekopírujte obrovský seznam všech známých direktiv. Jednotlivé direktivy mají různou podporu v prohlížečích a některé zůstávají experimentální. Identifikujte funkce, které aplikace používá, a poté explicitně vypněte relevantní nepoužívané.

7. COOP, COEP a CORP: cross-origin izolace není univerzální výchozí volba

Tyto hlavičky spolu souvisejí, ale řeší různé problémy.

Cross-Origin-Opener-Policy

Cross-Origin-Opener-Policy: same-origin

COOP řídí, zda dokumenty otevřené navigací nebo přes window.open() sdílejí skupinu kontextu prohlížení. same-origin odděluje dokument od cross-origin otvíračů a zmírňuje některé XS-Leaks.

Může rozbít OAuth popupy, platební okna a integrace spoléhající na window.opener. V některých případech je vhodnější 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 zdroje no-cors udělily povolení přes CORP nebo byly načteny pomocí CORS. Chybějící hlavičky mohou blokovat obrázky, fonty, skripty, rámy a další prostředky třetích stran.

Alternativou je:

Cross-Origin-Embedder-Policy: credentialless

To povoluje některé zdroje no-cors bez explicitního CORP a přitom odstraňuje přihlašovací údaje, jako jsou cookies.

Cross-Origin-Resource-Policy

Cross-Origin-Resource-Policy: same-origin

CORP je politika na samotném zdroji a může používat:

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

Není náhradou za CORS. MDN také dokumentuje problém v Chrome týkající se částečného vykreslování PDF při některých nasazeních CORP, takže by hlavička neměla být aplikována globálně bez testů.

Dvojice:

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

umožňuje cross-origin izolaci vyžadovanou vybranými pokročilými API, včetně plného přístupu k SharedArrayBuffer. Nenasazujte ji pouze kvůli skóre ve skeneru.

8. Zabezpečené cookies a cachování

Set-Cookie a Cache-Control nejsou vždy uváděny jako bezpečnostní hlavičky, ale přímo chrání relace a citlivá data.

Relační cookie

Set-Cookie: __Host-session=RANDOM_VALUE; Path=/; Secure; HttpOnly; SameSite=Lax
  • Secure omezuje přenos na HTTPS.
  • HttpOnly brání přístupu z JavaScriptu.
  • SameSite omezuje cross-site odesílání.
  • __Host- vyžaduje Secure, Path=/ a žádnou Domain, čímž váže cookie těsněji k hostu.

SameSite=Strict je silnější, ale může narušit návraty od poskytovatelů přihlášení nebo plateb. SameSite=None vyžaduje Secure a měla by se používat jen pro skutečně cross-site cookie.

Citlivé odpovědi

Cache-Control: no-store

To žádá soukromé i sdílené cache, aby odpověď neukládaly. Personalizovaný obsah, který smí být cachován v prohlížeči, ale ne u mezilehlých uzlů, může použít:

Cache-Control: private, no-cache

MDN doporučuje personalizované odpovědi explicitně označovat jako private, aby se předešlo nechtěnému sdílenému cachování.

9. Omezte prozrazování technologií

Hlavičky jako:

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

usnadňují fingerprinting. Jejich odstranění neschová technologický stack před odhodlaným útočníkem, ale vyhne se přímému prozrazení verze.

  • odstraňte X-Powered-By;
  • vypněte hlavičky s verzí frameworku;
  • omezte podrobnosti v Server;
  • nezveřejňujte záměrně nepravdivou verzi;
  • nezaměňujte zatajování za záplatování.

OWASP doporučuje odstranit X-Powered-By a omezit Server, přičemž poznamenává, že technologie lze i tak odvodit jinými způsoby.

10. Zastaralé hlavičky a zavádějící rady

X-XSS-Protection

Nezapínejte:

X-XSS-Protection: 1; mode=block

OWASP varuje, že zastaralé XSS filtry mohou vytvořit zranitelnosti v jinak bezpečných stránkách. Hlavičku vynechte, nebo ji explicitně vypněte:

X-XSS-Protection: 0

Místo toho použijte CSP, kódování výstupů a bezpečná API.

Expect-CT

Expect-CT je v praxi zastaralá, protože aktuální klienti vyžadují Certificate Transparency u moderních certifikátů. MDN ji od června 2021 popisuje jako převážně zastaralou.

Public-Key-Pins

HPKP by se nemělo nasazovat. Chybný pin by mohl uživatele na dlouhou dobu zablokovat a hlavička byla z moderních prohlížečů odstraněna. Upřednostněte správné TLS, automatickou obnovu, CAA, monitorování certifikátů a pečlivě prověřený HSTS preload.

Report-To

Stará:

Report-To: { ... }

je zastaralá. Použijte:

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

Access-Control-Allow-Origin: *

CORS není balík hlaviček pro zpevnění zabezpečení, který by se přidával globálně. Access-Control-Allow-Origin uvolňuje Same-Origin Policy. Odpovědi API s přihlašovacími údaji nemohou bezpečně kombinovat zástupný znak * s ověřeným cross-origin přístupem. Povolte pouze potřebné originy a validujte je na straně serveru.

11. Příklady konfigurace serveru

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é, protože zachovává hlavičky u chybových a nestandardních stavových odpovědí.

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 musí být odeslány před tělem odpovědi. Pro každý požadavek generujte samostatně 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();
});

Web využívající CDN, WebSockety, OAuth, platby nebo mapy bude potřebovat širší, ale stále explicitní CSP.

12. Postup zavádění, který se vyhne výpadkům

Inventarizace

Sepište všechny originy skriptů, stylů, fontů a obrázků; API a WebSocket endpointy; iframy; OAuth/platební popupy; zdroje CDN; nahrávání od uživatelů; subdomény pod HSTS a funkce prohlížeče, které aplikace používá.

Pozorování

  • spusťte CSP v režimu Report-Only;
  • sbírejte reporty a hlášení porušení z konzole prohlížeče;
  • otestujte každou kritickou uživatelskou cestu;
  • zahrňte mobilní a podporované prohlížeče;
  • zkontrolujte chybové stránky, přesměrování a statické prostředky.

Vynucujte postupně

  • začněte s object-src, base-uri, frame-ancestors a form-action;
  • přejděte na statické zdroje;
  • striktní script-src vynuťte jako poslední;
  • zvyšujte HSTS max-age postupně;
  • testujte COOP/COEP samostatně proti popupovým a cross-origin integracím.

Sledujte regrese

CI testy by měly stahovat reprezentativní URL, detekovat duplicitní nebo konfliktní hlavičky, potvrzovat MIME typy, odhalovat nechtěné odstranění CSP/HSTS a spouštět end-to-end přihlašovací a platební toky.

13. Jak testovat hlavičky

Zkontrolujte odpověď přímo:

curl -I https://example.com/

Sledujte přesměrování:

curl -IL https://example.com/

Prozkoumejte konkrétní zdroj:

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

Ověřte hlavičky na domovské stránce, přihlášení, odpovědích 404 a 500; potvrďte, že CSP není duplikována s konfliktními politikami; ujistěte se, že HSTS je odesíláno pouze přes HTTPS; zkontrolujte MIME typy; a ověřte, že CDN nebo reverzní proxy hlavičky neodstranily.

Bezplatný nástroj POLPROG Security Headers Inspector kontroluje HSTS, CSP, ochranu proti rámování a další prostředky. Pro kontrolu certifikátů a DNS použijte DNS & SSL Inspector a pro širší kontrolu SEO, výkonu, přístupnosti a zabezpečení Website Health Check.

Kontrolní seznam pro nasazení

CSP

  • Restriktivní default-src.
  • object-src 'none'.
  • Omezené base-uri.
  • frame-ancestors odpovídá skutečnému modelu vkládání.
  • form-action omezuje cíle formulářů.
  • Inline kód používá nonce nebo hash, když je to potřeba.
  • Nonce je jedinečný pro každou odpověď.
  • Žádné neopodstatněné 'unsafe-inline'.
  • Žádné neopodstatněné 'unsafe-eval'.
  • Politika nejprve otestována v režimu Report-Only.
  • Reportovací endpoint má rate limity a omezené uchovávání.

HTTPS a HSTS

  • Každá stránka a zdroj funguje přes HTTPS.
  • HTTP se přesměrovává přímo na HTTPS.
  • Certifikáty jsou monitorovány.
  • Všechny subdomény jsou zinventarizovány.
  • max-age zvyšován postupně.
  • includeSubDomains je bezpečné.
  • preload přidáno až po prověření důsledků.

Ostatní prostředky

  • X-Content-Type-Options: nosniff.
  • Správný Content-Type u každé odpovědi.
  • Explicitní Referrer-Policy.
  • Permissions-Policy vypíná nepoužívané funkce.
  • Žádné ALLOW-FROM v X-Frame-Options.
  • COOP nerozbíjí OAuth ani platby.
  • COEP neblokuje potřebné prostředky třetích stran.
  • CORP odpovídá modelu sdílení každého zdroje.
  • Relační cookies používají Secure, HttpOnly a vhodné SameSite.
  • Citlivé odpovědi používají správné Cache-Control.
  • Hlavičky s verzí technologií jsou odstraněny.
  • X-XSS-Protection chybí nebo je vypnuto.
  • Expect-CT, HPKP a stará Report-To jsou odstraněny.

Verdikt

Pro většinu firemních webů a webových aplikací je správné pořadí toto:

  1. Správné HTTPS, MIME typy a zabezpečené cookies.
  2. CSP specifická pro aplikaci, zaváděná přes Report-Only.
  3. HSTS nasazované po etapách.
  4. nosniff, Referrer-Policy, Permissions-Policy a ochrana proti rámování.
  5. COOP, COEP a CORP jen tehdy, když je cross-origin model pochopen.
  6. Odstranění zastaralých a informace prozrazujících hlaviček.

Nejlepší sada bezpečnostních hlaviček není ta nejdelší. Je to nejmenší politika, která přesně odpovídá aplikaci, obstojí při testování kritických cest a zůstává monitorována po každém nasazení.

HTTP Headers Security CSP HSTS Web Security

Často kladené otázky

Zabraňují bezpečnostní hlavičky každému útoku?

Ne. Omezují chování prohlížeče a zmírňují vybrané třídy zranitelností, ale nenahrazují autorizaci, validaci, záplatování závislostí, správu tajných údajů ani bezpečnostní testování.

Která hlavička je nejdůležitější?

U HTML stránek má největší potenciál dobře navržená CSP. Zároveň se snadno rozbije, takže by měla začínat v režimu Report-Only.

Mohu zkopírovat hotovou CSP?

Použijte ji pouze jako výchozí bod. Politika musí odpovídat skriptům, API, fontům, rámům, formulářům a integracím, které skutečná aplikace používá.

Je X-Frame-Options stále potřeba?

CSP frame-ancestors je moderní, pružný prostředek. DENY nebo SAMEORIGIN mohou zůstat jako vrstva kompatibility. Nepoužívejte ALLOW-FROM.

Lze HSTS nastavit hned na dva roky?

Technicky ano, ale je to riskantní, dokud nejsou zkontrolovány všechny subdomény, certifikáty a zastaralé služby. Zvyšujte max-age postupně.

Mám používat HSTS preload?

Pouze tehdy, když jsou celá doména a všechny subdomény trvale připraveny na HTTPS. Odebrání preloadovaného záznamu je pomalejší než vymazání HSTS politiky uložené v prohlížeči.

Funguje Permissions Policy stejně ve všech prohlížečích?

Ne. Jednotlivé direktivy mají různé úrovně podpory a některé jsou experimentální. Otestujte funkce, které skutečně konfigurujete.

Mají se COEP a CORP zapínat globálně?

Ne automaticky. Mohou blokovat obrázky, fonty, skripty, iframy a PDF soubory třetích stran. Nejprve zinventarizujte cross-origin zdroje a prověřte jejich chování CORS/CORP.

Proč skener penalizuje absenci X-XSS-Protection?

Některé skenery používají zastaralá pravidla. Aktuální doporučení OWASP je hlavičku vynechat nebo ji nastavit na 0.

Může CSP rozbít web?

Ano. Příliš restriktivní politika může blokovat skripty, styly, fonty, API, přihlášení a platby. Začněte s Content-Security-Policy-Report-Only.

Mají chybové stránky obsahovat tyto hlavičky?

Ano, kde je to pro daný typ odpovědi relevantní. HTML chybové stránky by neměly přijít o CSP, nosniff, Referrer-Policy ani ochranu proti rámování.

Zdroje a poznámky pod čarou

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

Bylo to užitečné?

Odebírejte nové články e-mailem

Jeden krátký e-mail na každý nový článek znalostní báze. Žádný spam, odhlášení jedním kliknutím.

Váš e-mail používáme pouze k zasílání nových článků. Žádné sdílení s třetími stranami.

Zpět do znalostní báze