Datahorses

Bezpečnostné hlavičky HTTP, ktoré má posielať každý firemný web

Autor: · · 3 min čítania

Bezpečnostné hlavičky HTTP sú pokyny, ktoré váš webový server posiela s každou stránkou. Hovoria prehliadaču, ako má s webom zaobchádzať: vždy používať HTTPS, nedovoliť iným webom vložiť vaše stránky do rámca, neodhadovať typ súboru a načítavať skripty len z miest, ktorým dôverujete. Web nespomalia a nastavujú sa raz, v konfigurácii servera alebo CDN.

Stručne pre väčšinu firemných webov: posielajte Strict-Transport-Security, Content-Security-Policy (aspoň s frame-ancestors), X-Content-Type-Options, Referrer-Policy a Permissions-Policy, nastavte cookies so správnymi príznakmi a odstráňte hlavičky, ktoré prezrádzajú verzie vášho softvéru. Odporúčané hodnoty nižšie vychádzajú z OWASP HTTP Headers Cheat Sheet a MDN.

Chýbajúca hlavička sama osebe len zriedka znamená vážny problém. Hlavičky však prezradia, ako starostlivo je web nastavený, a zatvárajú cestu celým skupinám útokov na strane prehliadača.

Ako overiť svoje hlavičky

Vypýtajte si od servera hlavičky úvodnej stránky:

curl -sI https://yourcompany.com/

Overte každý názov hostiteľa, nielen hlavný: e-shop, prihlásenie, zákaznícky portál a aj staré testovacie servery, ktoré ešte odpovedajú. Hlavičky nastavené v aplikácii často chýbajú na chybových stránkach, presmerovaniach a statických súboroch, preto otestujte niekoľko rôznych adries.

Hlavičky, ktoré by mal web posielať

Strict-Transport-Security (HSTS)

Prikáže prehliadaču, aby na vašej doméne určitý čas používal len HTTPS, takže návštevníka nemožno potichu presmerovať na nešifrované HTTP.

Strict-Transport-Security: max-age=63072000; includeSubDomains

max-age sa udáva v sekundách. includeSubDomains pridajte, až keď všetky subdomény fungujú cez HTTPS. Ak chcete doménu zaradiť do zoznamu preload v prehliadačoch, hstspreload.org vyžaduje max-age aspoň 31536000 (1 rok), includeSubDomains a preload. Preload sa ťažko vracia späť, preto ho pridajte až nakoniec.

Content-Security-Policy (CSP)

Určuje zdroje, z ktorých smie stránka načítať skripty, štýly, obrázky a rámce. Dobrá politika je najsilnejšia obrana proti cross-site scriptingu na strane prehliadača, musí však zodpovedať vášmu webu. Začnite v režime len hlásenia cez Content-Security-Policy-Report-Only, sledujte, čo by sa zablokovalo, a až potom ju vynucujte.

Kým nemáte úplnú politiku, pomôže aj jediná jednoduchá direktíva:

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

frame-ancestors určuje, ktoré weby smú vaše stránky vkladať, a tým blokuje clickjacking. Musí sa posielať ako hlavička, v značke <meta> nefunguje.

X-Frame-Options

Starší spôsob, ako zablokovať vkladanie do rámca. OWASP odporúča všade, kde sa dá, frame-ancestors a X-Frame-Options: DENY (alebo SAMEORIGIN) ako záložné riešenie pre staršie prehliadače.

X-Content-Type-Options

X-Content-Type-Options: nosniff

Zabráni prehliadaču odhadovať typ súboru, takže nahraný súbor sa nespustí ako skript. Dbajte, aby bola hlavička Content-Type správne nastavená na celom webe.

Referrer-Policy

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

Obmedzuje, akú časť adresy prehliadač prezradí inému webu, keď návštevník klikne na odkaz. Je to dôležité, keď adresy obsahujú čísla objednávok, tokeny alebo hľadané výrazy.

Permissions-Policy

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

Vypne funkcie prehliadača, ktoré váš web nepoužíva, takže podvrhnutý skript si ich nemôže vyžiadať.

Aj cookies potrebujú príznaky

Relačné cookies nastavujte s Secure (len cez HTTPS), HttpOnly (nečitateľné z JavaScriptu) a SameSite=Lax alebo Strict:

Set-Cookie: session=...; Secure; HttpOnly; SameSite=Lax; Path=/

Skontrolujte aj atribút Domain. Cookie s rozsahom .yourcompany.com prečíta každá subdoména, a to je podstatné, ak by niektorú z nich niekto prevzal cez zabudnutý záznam DNS.

Hlavičky, ktoré treba odstrániť alebo prestať používať

  • Server a X-Powered-By s číslami verzií, napríklad Apache/2.4.41 alebo PHP/7.4.3. Každému presne prezradia, aký softvér a akú verziu má hľadať. OWASP odporúča X-Powered-By odstrániť a Server nechať bez podrobností.
  • X-XSS-Protection. MDN ju označuje za zastaranú a neštandardnú a upozorňuje, že na inak bezpečných weboch môže spôsobiť problémy. OWASP odporúča nenastavovať ju, prípadne nastaviť X-XSS-Protection: 0, a spoliehať sa na CSP.
  • Expect-CT. OWASP radí nepoužívať ju a odstrániť ju z existujúcich konfigurácií.

Kde ich nastaviť

Hlavičky nastavte na jednom mieste, ktoré pokryje každú odpoveď: vo webovom serveri (nginx add_header ... always;, Apache Header always set), v CDN alebo v nastaveniach hlavičiek hostingovej platformy. Kľúčové slovo always v nginx je dôležité: bez neho sa hlavičky pridajú len k úspešným odpovediam a presmerovaniam, nie k chybovým stránkam.

Krátky kontrolný zoznam

  • Spustite curl -sI pre každý názov hostiteľa, ktorý vlastníte.
  • Pridajte HSTS, X-Content-Type-Options, Referrer-Policy, Permissions-Policy a frame-ancestors.
  • Úplnú CSP nasaďte najprv v režime len hlásenia.
  • Relačným cookies nastavte Secure, HttpOnly a SameSite.
  • Odstráňte čísla verzií zo Server a X-Powered-By a vyhoďte X-XSS-Protection a Expect-CT.
  • Po každej zmene servera, CDN alebo platformy kontrolu zopakujte.

Keď už upravujete konfiguráciu servera, overte aj to, že na ňom nie sú prístupné súbory .env, .git alebo zálohy.

Kde pomáha Datahorses

Datahorses každý deň stráži vaše weby zvonku a kontroluje to, čo vidia prehliadače aj útočníci: chýbajúce bezpečnostné hlavičky, cookies bez Secure, HttpOnly alebo SameSite, servery, ktoré prezrádzajú svoje verzie, a zmiešaný obsah HTTP na stránkach s HTTPS. Do vašich systémov nevstupujeme a žiadne prístupy nepotrebujeme. Každé zistenie obsahuje presnú zmenu konfigurácie pre vášho vývojára. Pozrite sa, čo všetko strážime, alebo si vyžiadajte ponuku.

Ďalšie články

Všetky články