Biztonság Szakszó

HSTS (HTTP Strict Transport Security)

Szerző: · 8 perc olvasás · Frissítve:
HSTS (HTTP Strict Transport Security) - Biztonság (szakszó) a tudástárban
HSTS (HTTP Strict Transport Security) - Biztonság | eClick GEO-audit tudástár

A HSTS (HTTP Strict Transport Security) egy HTTP-válaszfejléc, amellyel a szerver megparancsolja a böngészőnek, hogy a domaint egy megadott ideig kizárólag HTTPS-en keresse. A fejléc neve Strict-Transport-Security, és a böngésző a beállított időn belül a http:// címeket is HTTPS-re írja át, még mielőtt bármilyen kérést elküldene.

Hogyan működik

Az átirányítás önmagában nem elég. Ha a látogató http://oldal.hu címet ír be, az első kérés titkosítás nélkül megy ki. Egy támadó a hálózaton ezt elkaphatja, és nem engedi el a 301-es választ HTTPS-re. Ezt hívják SSL-stripping támadásnak.

A HSTS ezt a rést zárja be. Az első sikeres HTTPS-válasz után a böngésző eltárolja a szabályt. Onnantól a domainre menő HTTP-kéréseket saját maga alakítja át, hálózati forgalom nélkül. A max-age érték adja meg másodpercben, meddig érvényes a szabály, és minden HTTPS-válasz megújítja.

Mit jelentenek a direktívák

  • max-age=31536000: egy év, ez a szokásos érték. 6 hónap alatt (15768000) gyengének számít.
  • includeSubDomains: az összes aldomainre is kiterjed, például a shop. és a blog. címekre.
  • preload: jelzés, hogy a domain bekerülhet a böngészőkbe beépített HSTS-listába. Ekkor már a legelső látogatás is védett.

Mikor számít igazán

Login, kosár, pénztár, admin-felület: mindenhol, ahol munkamenet-süti vagy jelszó utazik. Egy elcsípett süti teljes fiók-átvételt jelenthet. Webshopnál ez közvetlen üzleti kockázat.

A generatív keresők és az AI-crawlerek (GPTBot, ClaudeBot, PerplexityBot és társaik) nem a HSTS-fejlécet olvassák értelmezés céljából. A hatás közvetett: a HSTS kikényszeríti az egységes HTTPS-címeket, így nem keletkezik HTTP és HTTPS duplikáció. Egy stabil, egy sémára rendezett oldalon kevesebb a duplikált tartalom és tisztább a kanonikus cím.

Röviden: a HSTS azt a néhány száz milliszekundumot védi ki, amíg a böngésző még nem tudja, hogy az oldalad HTTPS-en él.

Miért fontos

Biztonság

A sima HTTPS-átirányítás egy rést hagy. Az első kérés nyílt szövegben megy, és ezen a ponton lehet közbeavatkozni. A HSTS után a böngésző már nem is próbálkozik HTTP-vel, tehát nincs mit elfogni.

A veszély nem elméleti. Nyilvános wifi, szállodai hálózat, mobilszolgáltatói proxy: bárhol beékelődhet valaki. A munkamenet-süti pedig belépési jogot jelent.

SEO és címtisztaság

HSTS nélkül a HTTP- és HTTPS-változat is életben marad. A 301-es átirányítás ezt kezeli, de minden alkalommal újra lefut. A HSTS a klienst tanítja meg, így egy kérés-kör megspórolódik.

Ez mérhető sebességelőny is. Kevesebb átirányítás, jobb TTFB az első látogatás után.

Auditok és bizalom

A biztonsági minősítők vizsgálják a fejlécet. Az SSL Labs osztályzatnál A+ csak HSTS-szel érhető el, HSTS nélkül A a plafon. Ha partner vagy pályázat kér biztonsági felmérést, ez az első pár tétel egyike.

A riportokban ezt látjuk: az oldal HTTPS-en fut, érvényes tanúsítvánnyal, de a HSTS nincs bekapcsolva. Egy sor a konfigban, közepes hatás, nulla tartalmi munka.

Kikre vonatkozik

Vonatkozik rá:

  • Minden éles, HTTPS-en futó oldal, kivétel nélkül.
  • Webshopok és bármi, ahol belépés vagy fizetés van.
  • Aldomainekkel dolgozó oldalak, ott az includeSubDomains a kérdés.

Nem vonatkozik rá, vagy óvatosan:

  • Staging és fejlesztői környezet, ahol önaláírt tanúsítvány van. A HSTS itt kizárhatja magát a fejlesztőt.
  • Olyan aldomain, amit még csak HTTP-n szolgálsz ki. Erre nem adhatsz includeSubDomains-t, amíg át nem állítod.
  • Belső hálózati eszközök, kamerák, nyomtatók saját aldomainen. Ezek gyakran nem tudnak HTTPS-t.

Előfeltétel: működő HTTPS és TLS minden aldomainen, amit a szabály érint. HSTS-t csak akkor kapcsolj be, ha ez már rendben van.

A hatókör környezet és hoszting, nem kód. Szerverkonfigban, CDN-ben vagy a hosting felületén dől el, nem a CMS-ben.

Hogyan ellenőrzöd

Böngésző devtools

  1. Nyisd meg az oldalt HTTPS-en.
  2. F12, majd a Network fül.
  3. Töltsd újra az oldalt, és kattints a legfelső dokumentum-kérésre.
  4. A Headers alatt keresd a Response Headers blokkot.
  5. Ott kell lennie a strict-transport-security sornak.

curl

Egy sor elég a válaszfejlécek kiíratásához:

curl -sI https://oldal.hu | grep -i strict-transport

Az átirányítást is érdemes végigkövetni:

curl -sIL http://oldal.hu | grep -iE '^(HTTP|location|strict-transport)'

Külső ellenőrzés

Az SSL Labs teszt külön kiírja a HSTS állapotát és a max-age értéket. A hstspreload.org megmutatja, szerepel-e a domain a preload-listán.

Jó jel:

  • max-age legalább 31536000 (egy év).
  • A HTTP-cím 301-gyel megy HTTPS-re.
  • A fejléc HTTPS-en jelenik meg, minden aldomainen.
  • Ha van includeSubDomains, minden aldomain valóban HTTPS-en fut.

Rossz jel:

  • Nincs strict-transport-security fejléc.
  • max-age=0, ez kikapcsolja a szabályt.
  • Rövid, néhány napos max-age.
  • includeSubDomains úgy, hogy egy aldomain HTTP-n él. Az elérhetetlen lesz.
  • A fejléc csak a HTTP-válaszon van. Ott a böngésző figyelmen kívül hagyja.

Hogyan javítod

Előbb ellenőrizd, hogy minden érintett aldomain HTTPS-en fut. Utána indulj rövid max-age-dzsel, és csak bevált működés után emeld egy évre.

WordPress

A WordPress maga nem küld fejlécet, ez szerverszintű feladat.

  1. Apache esetén a .htaccess fájlba tedd a Header always set sort (lásd a kódpéldát).
  2. Nginx esetén a szerverblokkba kerül az add_header direktíva, ehhez hosting-hozzáférés kell.
  3. Ha Cloudflare vagy más CDN van előtte, ott is beállítható: SSL/TLS menü, HSTS szakasz.
  4. Töltsd újra az oldalt, és curl-lel ellenőrizd a fejlécet.
  5. Ha biztonsági plugin is állít fejléceket, nézd meg, nem küld-e duplán.

Shopify

A Shopify kezeli a tanúsítványt és a HSTS-t is, saját infrastruktúrán. Nincs mit beállítani, és nincs is hozzáférésed a fejlécekhez. Ellenőrizd curl-lel, hogy tényleg megjelenik-e.

Unas

Az Unas szolgáltatásként adja a HTTPS-t. Ha a fejléc hiányzik, nyiss ügyfélszolgálati jegyet, és kérd a Strict-Transport-Security bekapcsolását. Saját domainnél ellenőrizd, hogy minden aldomain rendben van-e.

Shoprenter

A Shoprenter szintén zárt platform. A fejlécet a szolgáltató oldalán kell kérni. Előtte curl-lel nézd meg, hátha már bent van.

Egyedi fejlesztés

  1. Döntsd el, hova kerül a fejléc: webszerver, reverse proxy vagy CDN. Egy helyre, ne többre.
  2. Állítsd be max-age=300 értékkel, és ellenőrizd az összes aldomaint.
  3. Ha egy hét alatt nincs probléma, emeld max-age=31536000-re.
  4. Adj includeSubDomains-t, ha minden aldomain HTTPS-en van.
  5. A preload csak a legvégén jöjjön. Onnan kilépni hónapokig tart.
  6. Ugyanitt rendezd a többi biztonsági fejlécet is.

Fontos sorrend: a HSTS előtt szüntesd meg a kevert tartalmat. Ha a HTTP-erőforrások megmaradnak, a böngésző a HSTS után sem tölti be őket, és törhet a megjelenés.

Gyakori hibák

  • includeSubDomains átgondolás nélkül: egy HTTP-n futó aldomain azonnal elérhetetlen lesz minden visszatérő böngészőben.
  • Túl rövid max-age: pár napos érvényesség mellett a védelem gyakorlatilag nem él, és az SSL Labs sem fogadja el.
  • preload túl korán: a böngészőkbe égetett listáról a kivétel hónapokig tart, tanúsítvány-hiba esetén nincs kiskapu.
  • Fejléc a HTTP-válaszon: a böngésző a nem titkosított válaszban érkező HSTS-t eldobja, tehát a beállítás hatástalan.
  • Mixed content maradványok: a HSTS blokkolja a HTTP-erőforrásokat, így eltűnhet CSS, kép vagy script.
  • Staging is megkapja: önaláírt tanúsítvány mellett a HSTS miatt nem lehet átkattintani a böngésző figyelmeztetésén.
  • Duplán küldött fejléc: ha a CDN és a szerver is beállítja, a két érték ütközhet, és nehéz kideríteni, melyik érvényes.

Technikai példa

Ajánlott fejléc egy évvel, aldomainekkel:

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

Apache, a .htaccess vagy a virtualhost fájlban. Az env=HTTPS feltétel gondoskodik róla, hogy a fejléc csak titkosított válaszra kerüljön rá:

<IfModule mod_headers.c>
  Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" env=HTTPS
</IfModule>

Nginx, a 443-as szerverblokkban. Az always miatt a hibaválaszokra is felkerül:

server {
  listen 443 ssl;
  server_name oldal.hu;
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}

Ellenőrzés a beállítás után. Az első sor a HTTPS-választ nézi, a második az átirányítási láncot:

curl -sI https://oldal.hu | grep -i strict-transport
curl -sI https://blog.oldal.hu | grep -i strict-transport

Mit néz ebből a riport

Az audit megnézi, hogy a HTTPS-válaszon szerepel-e a Strict-Transport-Security fejléc. Ha hiányzik, közepes hatású hiányosságot jelez, környezet vagy hoszting hatókörrel. Az ajánlás egyszerű: kapcsold be a fejlécet a szerveren.

Gyakori kérdések

Ha már HTTPS-re irányítok át, minek a HSTS?
Az átirányítás csak azután lép be, hogy az első kérés már nyílt szövegben kiment. Éppen ez az a pillanat, amit egy hálózati támadó kihasználhat. A HSTS-szel a böngésző már a kérés elküldése előtt HTTPS-re vált. Az átirányításra továbbra is szükség van, mert az első látogatást még az sem tudja megelőzni.
Milyen max-age értéket adjak meg?
Éles oldalon max-age=31536000, vagyis egy év. Ez a bevett érték, és az SSL Labs is ezt várja A+ osztályzathoz. Bevezetéskor viszont indulj alacsonyabbal, például 300 másodperccel. Így egy elrontott konfiguráció nem zárja ki a látogatókat napokra.
Veszélyes-e bekapcsolni?
Alapesetben nem, ha az oldal stabilan HTTPS-en fut. Két dologra kell figyelni: az includeSubDomains minden aldomaint érint, és a preload nehezen visszavonható. Ha ezeket csak ellenőrzés után adod meg, a HSTS rutinbeállítás.
Segít-e a HSTS a Google-rangsorolásban?
Közvetlen rangsorolási tényezőként nem működik. Közvetve annyit tesz, hogy egységesíti a címeket, és eltünteti a HTTP-változatot a képből. Ez kevesebb duplikációt és tisztább indexelést jelent. A hatás valós, de szerény.
Hogyan kapcsolom ki, ha rosszul állítottam be?
Állítsd a fejlécet max-age=0 értékre, és hagyd kint, amíg a régi érvényesség le nem jár. A már eltárolt szabályt csak így lehet visszavonni a látogatók böngészőjében. Saját gépen a Chrome chrome://net-internals/#hsts felületén törölhető azonnal. Preload-listáról a kivétel hónapokat vesz igénybe.

Források

Kapcsolódó fogalmak

A te oldaladon hogy áll a(z) „HSTS (HTTP Strict Transport Security)”?

Futtass egy SEO-auditot: pontszám, fejlesztői ítélet, a leggyorsabb javítások, és minden tételhez bizonyíték.

Ingyenes SEO-audit indítása