Security header-ek: HSTS, CSP, X-Frame-Options és mások
· 7 perc olvasás
Röviden: A security HTTP header-ek olyan sorok, amelyeket a szerver minden HTTP válaszhoz hozzáad, hogy közölje a böngészővel, hogyan kell az oldaladdal bánnia. Helyesen beállítva egész támadási osztályokat (XSS, clickjacking, MITM) szüntetnek meg - és ingyenesek.
Röviden: A security HTTP header-ek olyan sorok, amelyeket a szerver minden HTTP válaszhoz hozzáad, hogy közölje a böngészővel, hogyan kell az oldaladdal bánnia. Helyesen beállítva egész támadási osztályokat (XSS, clickjacking, MITM) szüntetnek meg - és ingyenesek.
Miért fontosak
Egy alkalmazás lehet backend oldalon tökéletesen biztonságos, de megfelelő header-ek nélkül továbbra is sebezhető böngésző oldali támadásokra: cross-site scripting (XSS), clickjacking, protocol downgrade, MIME confusion. A security header-ek a védelmet a böngészőbe tolják.
Strict-Transport-Security (HSTS)
HTTPS-t kényszerít minden jövőbeli látogatáshoz. Az első HTTPS látogatás után a böngésző megjegyzi a domaint, és maga írja át bármilyen http:// linket https://-re, akkor is, ha a felhasználó rossz válaszra kattint.
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
max-age=63072000= 2 évig érvényesincludeSubDomains= a szabály minden aldomain-re is érvényes (figyelem: ha van HTTP-only aldomain-ed, eltöri)preload= engedélyezi a felvételt a Chrome / Firefox / Safari beépített HSTS preload listájába
Figyelem:
A HSTS preload-dal 6+ hónapig kerül eltávolításra a listából. Ne foglald bele a preload-ot, mielőtt nem ellenőrizted, hogy a HTTPS stabilan működik minden aldomain-re is.
Content-Security-Policy (CSP)
A legerősebb, de a legnehezebben beállítható header. Whitelistezi, honnan tölthet le a böngésző script-eket, stílusokat, képeket, iframe-eket. CSP nélkül egy támadó, aki képes <script> taget injektálni, tetszőleges JS-t futtathat - CSP-vel csak jóváhagyott forrásokból származó kódot.
Content-Security-Policy: default-src 'self'; script-src 'self' 'sha256-...'; img-src 'self' data: https://cdn.example.com; style-src 'self' 'unsafe-inline'; frame-ancestors 'none'
Gyakori direktívák:
default-src 'self'= alapértelmezetten csak a saját domainemről engedj erőforrásokatscript-src= JS források (adj meg hash-t vagy nonce-t inline script-ekhez)style-src= CSS forrásokimg-src= képekconnect-src= AJAX, WebSocket, EventSourceframe-ancestors 'none'= senki sem ágyazhatja be az oldalt iframe-be (jobb, mint X-Frame-Options)report-uri /csp-report= a böngésző JSON-t küld minden megsértésnél (te elkapod a backend-ben és logolod)
X-Frame-Options
A frame-ancestors régebbi alternatívája. Megakadályozza a clickjacking-et - a támadó beágyazza az oldaladat iframe-ként és láthatatlan gombokkal takarja le.
X-Frame-Options: DENY
Értékek: DENY (senki), SAMEORIGIN (csak az én domainem), ALLOW-FROM uri (deprecated).
X-Content-Type-Options
X-Content-Type-Options: nosniff
Kikapcsolja a MIME sniffing-et - a böngésző tiszteletben fogja tartani a Content-Type-ot, amit a szerver visszaadott. Enélkül egy támadó feltölthet rossz típusú fájlt (pl. képet, ami valójában script-et tartalmazó HTML), és a böngésző web page-ként futtathatja.
Referrer-Policy
Referrer-Policy: strict-origin-when-cross-origin
Szabályozza, mennyi információt küld a böngésző az előző oldalról a Referer header-ben kattintáskor. A modern böngészőkben az alapértelmezett már strict-origin-when-cross-origin, de az explicit deklaratív header biztosítja a konzisztenciát.
Permissions-Policy
Kikapcsolja a nem szükséges API-kat - kamerát, mikrofont, GPS-t, geolocation-t. Egy támadó XSS-en keresztül nem kérheti ezeket az API-kat.
Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=()
Gyakorlati nginx konfiguráció
server {
listen 443 ssl http2;
server_name example.com;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
# A CSP terjedelmes - az alkalmazásod szerint definiáld
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; ..." always;
}
A kulcs az always - enélkül az nginx hibaválaszoknál (4xx, 5xx) kihagyja a header-eket.
Jelenlegi állapot audit-ja
Legegyszerűbben online eszközzel. A mi header check-ünk megmutatja, melyik header-ek hiányoznak és melyek helytelenek. Alapos audithoz a securityheaders.com is ad A-F pontszámot.
Következtetés
A security header-ek a security területén az egyik legjobb erőfeszítés-nyereség arányú befektetések - jellemzően fél óra beállítás a reverse proxy-ban a böngésző oldali támadások egész kategóriája ellen. Audit félévente a rendszeres karbantartás részeként ésszerű minimum.
Ingyenes security headers audit
Regisztráció nélkül, eredmény három másodperc alatt.
Próbálja ki az ePulz.io-t ingyen - 7 nap bankkártya nélkül.
Fiók létrehozása