Moodul 4 · 4.2
Sinu veebileht: https, HSTS ja turbepäised
Moodul 4: E-post, veebileht ja domeen · Lugemisaeg: 11 minutit
Eesmärk: pärast seda õppetundi oskad kontrollida oma veebilehe põhiturvet: kehtivat sertifikaati, suunamist https-le, HSTS-i koos sobiva max-age väärtusega, olulisemaid turbepäiseid ja oma CMS-i uuendamist.
Põhimõisted: TLS-sertifikaat, https, suunamine https-le, HSTS, max-age, includeSubDomains, preload, HTTP-päis, Content-Security-Policy, X-Content-Type-Options, frame-ancestors, X-Frame-Options, Referrer-Policy
Mis juhtub, kui keegi sinu lehe avab
Kui klient sisestab aadressiribale example.com, küsib veebilehitseja lehekülge sinu veebiserverist. See suhtlus käib HTTP kaudu. Https korral on selle ümber krüpteeritud ühendus: TLS. Selleks vajab sinu veebileht TLS-sertifikaati (sageli endiselt nimetatud SSL-sertifikaadiks). Sertifikaat tõendab, et server kuulub tõesti domeenile example.com, ning krüpteerimine tagab, et keegi ei saa teel kaasa lugeda ega midagi muuta. See on oluline avalikus wifi-võrgus, kus sa ei tea, kes võrku haldab (õppetund 5.3).
Iga vastusega saadab server koos lehe endaga kaasa ka hulga päiseid: lühikesi infoga ridu ja juhiseid veebilehitsejale. Sa ei näe neid ekraanil, kuid need määravad suurel määral, kui turvaliselt veebilehitseja sinu lehega käitub. Osa neist päistest on turbepäised. Selles õppetunnis vaatame nelja kihti: sertifikaat, suunamine, HSTS ja päised. Seejärel vaatame lühidalt ka oma veebilehe enda uuendamist.
Kiht 1: kehtiv sertifikaat
Sertifikaat on korras, kui see vastab kolmele tingimusele:
- see ei ole aegunud;
- selle on väljastanud usaldusväärne väljaandja (sertifitseerimisasutus, mida veebilehitsejad tunnevad, näiteks Let's Encrypt või mõni kommertspakkuja);
- see kehtib täpselt selle nime kohta, mida külastaja avab:
example.comjawww.example.com, kui kasutad mõlemat.
Peaaegu iga majutuspakkuja korraldab tänapäeval tasuta sertifikaadi, mis uueneb automaatselt. Kui midagi läheb valesti, on põhjuseks enamasti see, et domeeninimi osutab teisele serverile, või see, et CAA-kirje blokeerib väljaandja (õppetund 4.3).
Oluline teada: lukuikoon ei ütle midagi lehe usaldusväärsuse kohta. See ütleb vaid, et ühendus on krüpteeritud ja sertifikaat kuulub aadressiribal oleva nime juurde. Ka andmepüügilehtedel aadressil mijnbank-veilig.example on sama hästi lukuikoon olemas. Seetõttu õpid õppetunnis 3.2 domeeni lugema.
Kiht 2: alati suuna https-le
Ainuüksi sertifikaadist ei piisa. Kes avab aadressi http://example.com, näiteks vana lingi kaudu või trükkides ainult nime, peab automaatselt jõudma https-versioonile. Seda nimetatakse suunamiseks (ingl redirect, tavaliselt staatuskoodiga 301).
Korrektne järjekord on:
http://example.com -> https://example.com
https://example.com -> https://www.example.com (ainult siis, kui kasutad www-d põhiaadressina)
http://www.example.com -> https://www.example.comPane tähele esimest rida: suuna http esmalt https-le samal nimel, alles seejärel vajadusel www-le. Nii saab veebilehitseja ka paljasnime HSTS-juhise kätte. Internet.nl kontrollib täpselt seda.
Levinud viga on topeltsuunamine: nii majutuspaneelis kui ka pluginas või failis .htaccess. See võib tekitada lõputu tsükli ("liiga palju ümbersuunamisi"). Kasuta ühte kohta.
Kiht 3: HSTS
Suunamisel on üks nõrk hetk: kõige esimene päring käib veel krüpteerimata http kaudu. Ründaja samas võrgus saab selle ühe päringu pealt kuulata ja hoida külastaja võltsitud, krüpteerimata versioonil. Selle vastu on HSTS (HTTP Strict Transport Security, RFC 6797).
HSTS-iga saadab sinu leht https kaudu kaasa päise:
Strict-Transport-Security: max-age=31536000; includeSubDomainsVeebilehitseja jätab siis meelde: "seda lehte ava ainult https kaudu, järgmised 31 536 000 sekundit (üks aasta)". Kui külastaja sisestab hiljem http://example.com, teeb veebilehitseja sellest ise https, enne kui midagi üldse võrku saadetakse. Nõrk esimene päring jääb ära.
| Osa | Tähendus |
|---|---|
max-age= | Kui kaua veebilehitseja seda meeles peab, sekundites. Internet.nl loeb piisavaks vähemalt ühe aasta (max-age=31536000); lühike periood ei kaitse inimesi, kes külastavad sinu lehte harva. |
includeSubDomains | Kehtib ka kõigi alamdomeenide kohta, näiteks shop.example.com ja mail.example.com. |
preload | Taotled lisamist nimekirja, mis on veebilehitsejatesse sisse ehitatud (hstspreload.org). Siis on kaitstud isegi kõige esimene külastus. Nõuded: muuhulgas max-age vähemalt üks aasta, includeSubDomains ning kõik alamdomeenid https peal. Nimekirjast eemaldamine võtab kaua aega. |
max-age=0 | Kustutab meelde jäetud juhise. |
Kolm asja, mida pead teadma enne HSTS-i sisselülitamist:
- Kõigepealt peab https kõikjal töötama. Veebilehitseja, kes on HSTS-i meelde jätnud ja näeb sertifikaadi viga, ei anna külastajale mingit nuppu, et siiski jätkata (RFC 6797, lõik 12.1). Kui sinu sertifikaat aegub või ei kehti nime
wwwjaoks, on sinu leht nende külastajate jaoks kättesaamatu, kuni see on lahendatud. includeSubDomainspuudutab kõike sinu domeeni all. Vana alamdomeen ilma sertifikaadita, näiteks printeri- või kaameralehekülg aadressilcamera.example.com, ei ole pärast seda enam avatav.- Ehita see üles järk-järgult. Alusta lühikese
max-ageväärtusega (näiteks üks päev), kontrolli, et kõik töötab, ja tõsta sammhaaval kuni ühe aastani. Oota iga sammu juures kogu perioodi lõppu.
HSTS-päist, mis saabub tavalise http kaudu, veebilehitseja eirab. Seda näed seega ainult https-vastuses.
Kiht 4: turbepäised
Lisaks HSTS-ile on veel mõned päised, mis ütlevad veebilehitsejale, mida ta tohib ja mida ei tohi sinu lehtedega teha. Kõiki neid ei pea olema täiuslikult paigas, kuid esimesed kolm on lihtsad ja riskivabad.
| Päis | Mille vastu | Hea väärtus |
|---|---|---|
X-Content-Type-Options | Veebilehitseja hakkab ise arvama, mis fail on, mistõttu üleslaaditud "pilti" saab käivitada skriptina. | nosniff (ainus kehtiv väärtus) |
Content-Security-Policy: frame-ancestors ... või X-Frame-Options | Clickjacking: mõni teine leht laadib sinu lehekülge nähtamatult raamis ja laseb külastajatel märkamatult sinu nuppudele klõpsata. | frame-ancestors 'self' või 'none'; vanem päis X-Frame-Options: SAMEORIGIN või DENY |
Referrer-Policy | Kui klõpsatakse teisele lehele, saadab veebilehitseja kaasa eelmise lehe aadressi. Seal võib olla tundlikku infot, näiteks otsingusõna või tellimuse number. | no-referrer või same-origin (range), strict-origin-when-cross-origin (levinud, internet.nl annab siin hoiatuse) |
Content-Security-Policy (täielik) | Piirab, millistest kohtadest tohivad skriptid, stiilid ja pildid laaduda. Muudab pahatahtlike sisestatud skriptide (XSS) kasutamise palju keerulisemaks. | Igale lehele eraldi. Väldi väärtusi unsafe-inline, unsafe-eval ja metamärke. |
Täielik Content-Security-Policy on kõige tugevam, kuid ka kõige keerulisem: liiga range reegel võib lõhkuda sinu statistika, maksenupu või vestlusakna. Variandiga Content-Security-Policy-Report-Only saad kõigepealt mõõta, mis blokeeritaks, ilma midagi lõhkumata. Jäta see oma veebiarendaja hoolde või alusta ainult väärtusest frame-ancestors.
Päiste vaatamine ise
Ava oma leht veebilehitsejas, vajuta F12 (või vali "Uuri"), mine vahekaardile Võrk, laadi leht uuesti ja klõpsa esimesel päringul. Jaotises "Vastuse päised" (Response Headers) näed kõike, mida server kaasa saadab. Käsurealt saab seda ka teha:
curl -sI https://example.com/Veebileht ise: CMS, pluginad ja teemad
Parimatest päistest ei ole kasu, kui tarkvara sinu lehe taga on lünklik. Enamik väikeettevõtete häkitud lehti ei ole murtud veebiserveri kaudu, vaid vananenud plugina, aastaid uuendamata teema või nõrga haldaja parooli kaudu.
- Lülita sisse automaatsed uuendused oma CMS-i jaoks (näiteks WordPress, Joomla või mõni muu süsteem) ja pluginatele, kus see on võimalik.
- Eemalda pluginad ja teemad, mida sa ei kasuta; väljalülitamisest ei piisa, failid on ikka alles.
- Kasuta haldaja sisselogimiseks tugevat, unikaalset parooli ja kaheastmelist autentimist (2FA) (moodul 2) ning piira sisselogimiskatsete arvu.
- Hoia oma paketi PHP versioon (või mõne muu keele versioon) sellisena, mis veel uuendusi saab (õppetund 5.1).
Praktikas: kuidas see välja näeb
DirectAdminis, mida WebOké kasutab, lülitad oma domeeni juures kõigepealt sisse Secure SSL ja seejärel Force SSL with https redirect. Samas kohas on lüliti HSTS-i jaoks; lülita see sisse alles siis, kui sertifikaat töötab kõigi nimede jaoks. Teistel pakkujatel töötab see sarnaselt, või saad selle korraldada oma CMS-i seadetes.
Kui sinu leht töötab Apache või LiteSpeed peal, saad päised panna ka faili .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>Lisa includeSubDomains alles siis, kui oled kindel, et igal alamdomeenil on https olemas. Kontrolli pärast iga muudatust internet.nl veebilehetestiga või oma veebilehitseja arendajatööriistadega.
Kokkuvõte
- Lukuikoon tähendab: krüpteeritud ja õige nimi. See ei tähenda: usaldusväärne.
- Suuna http alati https-le, kõigepealt samal nimel, ja ühest kohast.
- HSTS laseb veebilehitsejal meelde jätta, et sinu leht käib ainult https kaudu; internet.nl loeb heaks
max-ageväärtuse vähemalt üks aasta (31536000). Lülita see sisse alles siis, kui https töötab kõikjal, ja ehita see üles järk-järgult. X-Content-Type-Options: nosniff,frame-ancestors(võiX-Frame-Options) jaReferrer-Policyon lihtsad; täielik Content-Security-Policy on iga lehe jaoks eraldi tehtav.- Sinu CMS-i, pluginate ja teemade uuendused on vähemalt sama olulised kui päised.
Test
Ülesanne
Ülesanne A4.2: Hinda oma domeeni kaitstust. Sisesta oma veebilehe domeeninimi (kui sul seda ei ole, kasuta internet.nl). Programm avab sinu domeeni http:// ja https:// versioonid ning kontrollib sertifikaati, suunamist https-le, HSTS-i ja turbepäiseid. Iga punkti kohta saad rohelise, oranži või punase hinnangu koos selgitusega.
Ülesanne D4.2: Oma veebilehe uuendamine ja koristamine. Logi sisse oma veebilehe haldusesse, kontrolli oma CMS-i, pluginate ja teemade versiooni, eemalda see, mida sa ei kasuta, ja lülita automaatsed uuendused sisse, kus võimalik. Märgi kontrollnimekiri ja vasta järelemõtlemise küsimusele.
Ülesanne D4.2: Oma veebilehe uuendamine ja koristamine
Nii teed seda: (1) Logi sisse oma veebilehe haldusesse (või palu veebiarendajal seda koos teha). (2) Märgi üles oma CMS-i versioon ja vaata, kas uuendusi ootab. (3) Tee varukoopia (õppetund 6.1), paigalda CMS-i, pluginate ja teemade uuendused. (4) Eemalda pluginad ja teemad, mida sa ei kasuta. (5) Lülita automaatsed uuendused sisse, kus võimalik. (6) Kontrolli, millised halduskontod on olemas, ja eemalda kontod inimestelt, kes enam seal ei tööta. (7) Lülita igale halduskontole sisse kaheastmeline autentimine (2FA).
Su linnukesed ja märkmed jäävad ainult sellesse brauserisse, me ei saada neid kuhugi. Kui oled sisse loginud, salvestame Minu kursustes ainult info, et tegid ülesande ära.
Rohkem lugemist
WebOké artiklites toodud sammud kehtivad WebOké keskkonna kohta; teistel pakkujatel töötab see sarnaselt.
- SSL-sertifikaadi aktiveerimine, uuendamine ja probleemide lahendamine
- Suuna külastajad kohustuslikus korras https-ile
- DirectAdmin juhend 6.4: Külastajate suunamine alati https peale
- DirectAdmin juhend 6.7: Lukku ei kuvata või "ei ole turvaline": mixed content'i lahendamine
- DirectAdmin juhend 15.10: Web Application Firewall
- WordPressi wp-login.php kaitsmine
- Internet.nl, veebilehetest (sõltumatu): https://internet.nl
- RFC 6797, HTTP Strict Transport Security: https://www.rfc-editor.org/rfc/rfc6797
- HSTS eellaadimise nimekiri: https://hstspreload.org
- MDN, selgitus päiste kohta (inglise keeles): https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security
