Modul 4 · 4.2
Vaša spletna stran: https, HSTS in varnostne glave
Modul 4: E-pošta, spletna stran in domena · Čas branja: 11 minut
Cilj učenja: Po tej lekciji boste znali preveriti osnovno zaščito svoje spletne strani: veljaven certifikat, preusmeritev na https, HSTS z ustrezno vrednostjo max-age, najpomembnejše varnostne glave in posodabljanje svojega CMS.
Ključni pojmi: TLS certifikat, https, preusmeritev na https, HSTS, max-age, includeSubDomains, preload, HTTP glava, Content-Security-Policy, X-Content-Type-Options, frame-ancestors, X-Frame-Options, Referrer-Policy
Kaj se zgodi, ko nekdo odpre Vašo stran
Če stranka v naslovno vrstico vtipka example.com, brskalnik zahteva stran od Vašega spletnega strežnika. Ta pogovor poteka prek HTTP. Pri https je okoli tega šifrirana povezava: TLS. Za to Vaša spletna stran potrebuje TLS certifikat (pogosto še vedno imenovan SSL certifikat). Certifikat dokazuje, da strežnik res pripada example.com, šifriranje pa poskrbi, da nihče po poti ne more brati ali spreminjati vsebine. To je pomembno na javnem wifiju, kjer ne veste, kdo upravlja omrežje (lekcija 5.3).
Pri vsakem odgovoru strežnik poleg same strani pošlje tudi niz glav (headers): kratke vrstice z informacijami in navodili za brskalnik. Na zaslonu jih ne vidite, a v veliki meri določajo, kako varno brskalnik ravna z Vašo stranjo. Del teh glav so varnostne glave. V tej lekciji si bomo ogledali štiri plasti: certifikat, preusmeritev, HSTS in glave. Nato se na kratko posvetimo posodabljanju Vaše spletne strani.
Plast 1: veljaven certifikat
Certifikat je v redu, če izpolnjuje tri pogoje:
- ni potekel;
- izdal ga je zaupanja vreden izdajatelj (overitelj, ki ga brskalniki poznajo, kot je Let's Encrypt ali komercialni ponudnik);
- velja za točno to ime, ki ga obiskovalec odpre:
example.cominwww.example.com, če uporabljate oba.
Skoraj vsak ponudnik gostovanja danes samodejno uredi brezplačen certifikat, ki se samodejno podaljšuje. Če kaj ne deluje, je to običajno zato, ker domensko ime kaže na drug strežnik ali ker zapis CAA blokira izdajatelja (lekcija 4.3).
Pomembno je vedeti: ključavnica nič ne pove o zanesljivosti strani. Pove le, da je povezava šifrirana in da certifikat ustreza imenu v naslovni vrstici. Lažne (phishing) strani na mijnbank-veilig.example imajo prav tako ključavnico. Zato se v lekciji 3.2 naučite brati domeno.
Plast 2: vedno preusmerite na https
Sam certifikat ne zadošča. Kdor odpre http://example.com, na primer prek stare povezave ali z vpisom samo imena, mora samodejno priti na različico https. Temu rečemo preusmeritev (angl. redirect, običajno s statusno kodo 301).
Pravilno zaporedje je:
http://example.com -> https://example.com
https://example.com -> https://www.example.com (samo če www uporabljate kot glavni naslov)
http://www.example.com -> https://www.example.comBodite pozorni na prvo vrstico: s http najprej preusmerite na https na istem imenu, šele nato po potrebi na www. Tako lahko brskalnik prejme tudi navodilo HSTS za golo ime. Internet.nl natanko to preverja.
Pogosta napaka je dvojna preusmeritev: v nadzorni plošči gostovanja in hkrati v vtičniku ali v .htaccess. To lahko povzroči neskončno zanko ("preveč preusmeritev"). Uporabite samo eno mesto.
Plast 3: HSTS
Preusmeritev ima šibko točko: prva zahteva gre še vedno nešifrirano prek http. Napadalec v istem omrežju lahko to prvo zahtevo prestreže in obiskovalca zadrži na ponarejeni, nešifrirani različici. Za to je namenjen HSTS (HTTP Strict Transport Security, RFC 6797).
S HSTS Vaša stran prek https pošlje glavo:
Strict-Transport-Security: max-age=31536000; includeSubDomainsBrskalnik si potem zapomni: "to stran odpiraj samo prek https, naslednjih 31.536.000 sekund (eno leto)". Če obiskovalec kasneje vtipka http://example.com, brskalnik sam spremeni naslov v https, še preden gre karkoli prek omrežja. Šibka prva zahteva tako odpade.
| Del | Pomen |
|---|---|
max-age= | Kako dolgo si brskalnik to zapomni, v sekundah. Internet.nl kot zadostno šteje vsaj eno leto (max-age=31536000); kratko obdobje ne ščiti ljudi, ki Vašo stran obiščejo le občasno. |
includeSubDomains | Velja tudi za vse poddomene, kot sta shop.example.com in mail.example.com. |
preload | Zaprosite za vključitev na seznam, ki je vgrajen v brskalnike (hstspreload.org). Tako je zaščiten tudi čisto prvi obisk. Pogoji: med drugim max-age vsaj eno leto, includeSubDomains in vse poddomene na https. Odstranitev s seznama traja dolgo. |
max-age=0 | Izbriše zapomnjeno navodilo. |
Tri stvari, ki jih morate vedeti, preden vklopite HSTS:
- Najprej mora https delovati povsod. Brskalnik, ki si je zapomnil HSTS in zazna napako certifikata, obiskovalcu ne ponudi gumba za nadaljevanje kljub temu (RFC 6797, odstavek 12.1). Če Vaš certifikat poteče ali ne velja za
www, je Vaša stran za te obiskovalce nedosegljiva, dokler težave ne odpravite. includeSubDomainsvpliva na vse pod Vašo domeno. Stara poddomena brez certifikata, na primer stran tiskalnika ali kamere nacamera.example.com, potem ni več dosegljiva.- Gradite postopno. Začnite s kratkim
max-age(na primer en dan), preverite, ali vse deluje, in postopno povečujte do enega leta. Pri vsakem koraku počakajte celotno obdobje.
Glavo HSTS, ki pride prek navadnega http, brskalnik prezre. Zato jo vidite samo v odgovoru https.
Plast 4: varnostne glave
Poleg HSTS obstaja še nekaj glav, ki brskalniku povedo, kaj sme in česa ne sme početi z Vašimi stranmi. Vseh Vam ni treba imeti popolnih, a prve tri so preproste in brez tveganja.
| Glava | Proti čemu | Dobra vrednost |
|---|---|---|
X-Content-Type-Options | Brskalnik sam ugiba, kakšna je vrsta datoteke, zaradi česar se naložena "slika" lahko izvede kot skripta. | nosniff (edina veljavna vrednost) |
Content-Security-Policy: frame-ancestors ... ali X-Frame-Options | Clickjacking: druga stran nevidno naloži Vašo stran v okvir (frame) in obiskovalce zavede, da nevede kliknejo na Vaše gumbe. | frame-ancestors 'self' ali 'none'; starejša glava X-Frame-Options: SAMEORIGIN ali DENY |
Referrer-Policy | Ob kliku na povezavo do druge strani brskalnik posreduje naslov prejšnje strani. V njem je lahko občutljiv podatek, kot je iskalni niz ali številka naročila. | no-referrer ali same-origin (strogo), strict-origin-when-cross-origin (običajno; internet.nl tu prikaže opozorilo) |
Content-Security-Policy (celotna) | Omeji, od kod se smejo nalagati skripte, slogi in slike. Veliko oteži vrinjene zlonamerne skripte (XSS). | Prilagojeno vsaki strani posebej. Izogibajte se unsafe-inline, unsafe-eval in nadomestnim znakom. |
Celotna Content-Security-Policy je najmočnejša, a tudi najzahtevnejša: preveč strogo pravilo lahko pokvari Vaše statistike, gumb za plačilo ali okno za klepet. Z različico Content-Security-Policy-Report-Only lahko najprej izmerite, kaj bi bilo blokirano, ne da bi karkoli pokvarili. To prepustite svojemu spletnemu razvijalcu ali začnite le s frame-ancestors.
Ogled glav
Odprite svojo stran v brskalniku, pritisnite F12 (ali izberite "Preglej"), pojdite na zavihek Omrežje (Network), znova naložite stran in kliknite na prvo zahtevo. Pod "Glave odgovora" (Response Headers) vidite vse, kar strežnik pošlje. Z ukazno vrstico je mogoče tudi takole:
curl -sI https://example.com/Spletna stran sama: CMS, vtičniki in teme
Najboljše glave ne pomagajo, če je programska oprema za Vašo stranjo ranljiva. Večina vdrtih strani malih podjetij ni bila ogrožena prek spletnega strežnika, temveč prek zastarelega vtičnika, teme, ki je že leta nihče ne posodablja, ali šibkega skrbniškega gesla.
- Vklopite samodejne posodobitve za svoj CMS (na primer WordPress, Joomla ali drug sistem) in za vtičnike, kjer je to mogoče.
- Odstranite vtičnike in teme, ki jih ne uporabljate; onemogočeno ni dovolj, saj datoteke še vedno obstajajo.
- Za skrbniško prijavo uporabite močno, edinstveno geslo in dvostopenjsko preverjanje (2FA) (modul 2) ter omejite število poskusov prijave.
- Različico PHP (ali drugega jezika) svojega paketa ohranjajte na ravni, ki še vedno prejema posodobitve (lekcija 5.1).
V praksi: tako je videti
V DirectAdmin, nadzorni plošči, ki jo uporablja WebOké, pri svoji domeni najprej vklopite Varen SSL, nato pa Prisilite SSL s https preusmeritvijo. Na istem mestu je stikalo za HSTS; vklopite ga šele, ko certifikat deluje za vsa imena. Pri drugih ponudnikih deluje podobno, ali pa to uredite v nastavitvah svojega CMS.
Če Vaša stran teče na Apache ali LiteSpeed, lahko glave nastavite tudi v .htaccess:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000"
Header always set X-Content-Type-Options "nosniff"
Header always set Content-Security-Policy "frame-ancestors 'self'"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>includeSubDomains dodajte šele, ko ste prepričani, da ima vsaka poddomena https. Po vsaki spremembi preverite s testom spletne strani internet.nl ali z razvijalskimi orodji svojega brskalnika.
Povzetek
- Ključavnica pomeni: šifrirano in pravo ime. Ne pomeni: zanesljivo.
- Http vedno preusmerite na https, najprej na istem imenu, in na enem samem mestu.
- HSTS poskrbi, da si brskalnik zapomni, da Vaša stran deluje samo prek https; internet.nl kot dobro šteje
max-agevsaj eno leto (31536000). Vklopite ga šele, ko https deluje povsod, in ga gradite postopoma. X-Content-Type-Options: nosniff,frame-ancestors(aliX-Frame-Options) inReferrer-Policyso preproste; celotna Content-Security-Policy je prilagojena vsaki strani posebej.- Posodobitve Vašega CMS, vtičnikov in tem so vsaj tako pomembne kot glave.
Kviz
Naloga
Naloga A4.2: Preverjanje https, HSTS in glav Vaše spletne strani. Vnesite domensko ime svoje spletne strani (če ga nimate, uporabite internet.nl). Program odpre http:// in https:// različico Vaše domene ter preveri certifikat, preusmeritev na https, HSTS in varnostne glave. Za vsako točko prejmete oceno zeleno, oranžno ali rdeče z razlago.
Naloga D4.2: Posodabljanje in čiščenje Vašega spletnega mesta. Prijavite se v nadzorno ploščo svoje spletne strani, preverite različico svojega CMS, vtičnikov in tem, odstranite tisto, česar ne uporabljate, in vklopite samodejne posodobitve, kjer je to mogoče. Odkljukajte kontrolni seznam in odgovorite na refleksijsko vprašanje.
Naloga D4.2: Posodabljanje in čiščenje Vašega spletnega mesta
Tako se lotite naloge: (1) Prijavite se v upravljanje Vašega spletnega mesta (ali prosite svojega spletnega razvijalca, da to opravi skupaj z Vami). (2) Zabeležite različico Vašega CMS in preverite, ali so na voljo posodobitve. (3) Izdelajte varnostno kopijo (lekcija 6.1), namestite posodobitve CMS, vtičnikov in tem. (4) Odstranite vtičnike in teme, ki jih ne uporabljate. (5) Kjer je mogoče, vklopite samodejne posodobitve. (6) Preverite, kateri skrbniški računi obstajajo, in odstranite račune oseb, ki tam ne delajo več. (7) Vklopite dvostopenjsko preverjanje (2FA) za vsak skrbniški račun.
Vaše kljukice in zapiski ostanejo samo v tem brskalniku, nikamor jih ne pošiljamo. Če ste prijavljeni, v Moji tečaji shranimo samo podatek, da ste nalogo opravili.
Za dodatno branje
Koraki v člankih WebOké veljajo za okolje WebOké; pri drugih ponudnikih deluje podobno.
- Aktiviranje, podaljšanje in odpravljanje težav s SSL-certifikatom
- Obvezno preusmerjanje obiskovalcev na https
- Priročnik DirectAdmin 6.4: Obiskovalce vedno preusmerite na https
- Priročnik DirectAdmin 6.7: Brez ključavnice of 'ni varno': mixed content odpraviti
- Priročnik DirectAdmin 15.10: Požarni zid spletne aplikacije
- Zaščita wp-login.php v WordPressu
- Internet.nl, test spletne strani (neodvisen): https://internet.nl
- RFC 6797, HTTP Strict Transport Security: https://www.rfc-editor.org/rfc/rfc6797
- Seznam HSTS preload: https://hstspreload.org
- MDN, razlaga glav (v angleščini): https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security
