Vissza a bloghoz

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ényes
  • includeSubDomains = 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ásokat
  • script-src = JS források (adj meg hash-t vagy nonce-t inline script-ekhez)
  • style-src = CSS források
  • img-src = képek
  • connect-src = AJAX, WebSocket, EventSource
  • frame-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.

Weboldal tesztelése →


Próbálja ki az ePulz.io-t ingyen - 7 nap bankkártya nélkül.

Fiók létrehozása