HSTS ja tietoturvaotsikot verkkosivustollesi
Jokaisen sivun yhteydessä verkkopalvelimesi lähettää mukana headerit: lyhyitä rivejä, jotka sisältävät ohjeita selaimelle. Ne määrittävät osittain, miten turvallisesti selain käsittelee sivustoasi. Tässä kerrotaan, mitä HSTS on, mitä muita suojausheadereita on olemassa ja miten ne otetaan käyttöön ja testataan.
Ensin sivustollasi täytyy olla toimiva sertifikaatti ja kävijöiden täytyy ohjautua https-osoitteeseen. Lue tästä lisää: SSL-sertifikaatin aktivointi, uusiminen ja ongelmien ratkaiseminen ja Kävijöiden pakollinen ohjaus https-osoitteeseen.
Mitä HSTS tekee?
Ohjauksessa https-osoitteeseen on yksi heikko hetki: ensimmäinen pyyntö http:n kautta kulkee vielä salaamattomana. Joku samassa verkossa, esimerkiksi julkisessa wifi-verkossa, voi siepata kyseisen pyynnön. HSTS (HTTP Strict Transport Security) ratkaisee tämän. Sivustosi lähettää tämän headerin mukana https:n kautta:
Strict-Transport-Security: max-age=31536000
Selain muistaa tämän jälkeen, että sivustosi saa avata vain https:n kautta. Jos kävijä kirjoittaa myöhemmin http://, selain muuttaa sen itse https-muotoon, vielä ennen kuin mitään lähtee verkkoon. HSTS-headerin, joka saapuu tavallisen http:n kautta, selain jättää huomiotta.
| Osa | Merkitys |
|---|---|
max-age | Kuinka kauan selain muistaa tämän, sekunteina. Internet.nl:n testi pitää vähintään vuotta (31536000) riittävänä. |
includeSubDomains | Koskee myös kaikkia alidomaineja, kuten shop.sinundomainisi.fi ja mail.sinundomainisi.fi. |
preload | Pyydät listalle, joka on sisäänrakennettu selaimiin (hstspreload.org). Tällöin jopa aivan ensimmäinen vierailu on suojattu. Tähän tarvitaan muun muassa vuosi, includeSubDomains ja https kaikilla alidomaineilla. Listalta poistuminen kestää kauan. |
max-age=0 | Poistaa muistetun ohjeen seuraavalla vierailulla https:n kautta. |
includeSubDomains-asetuksella tämä koskee myös jokaista alidomainia, kuten vanhaa kamera- tai tulostinsivua ilman sertifikaattia. Rakenna siis vähitellen: aloita lyhyellä max-age-arvolla, esimerkiksi päivällä (86400), tarkista että kaikki toimii ja nosta arvoa vaiheittain vuoteen asti.HSTS-kytkin DirectAdminissa
DirectAdminissa siirry kohtaan Domains ja klikkaa domainisi nimeä. Jos Secure SSL on päällä, näet HSTS-kohdassa kytkimen Enable HTTP Strict Transport Security. Klikkaa sen jälkeen Edit tallentaaksesi. Vaiheittaiset ohjeet löydät täältä: Kävijöiden pakollinen ohjaus https-osoitteeseen.
Jos haluat tietää, minkä max-age-arvon sivustosi lähettää, katso selaimesi kehittäjätyökaluista tai internet.nl:n testistä (katso alla). Aseta HSTS vain yhteen paikkaan: joko DirectAdminissa tai .htaccess-tiedostossa, ei molempiin. Jos selain saa kaksi HSTS-headeria, se käyttää vain ensimmäistä.
Muut suojausheaderit
| Header | Mitä vastaan | Aloitusarvo |
|---|---|---|
X-Content-Type-Options | Selain alkaa itse arvailla, mikä tiedosto on, jolloin ladattu "kuva" voidaan suorittaa skriptinä. | nosniff (ainoa kelvollinen arvo) |
Content-Security-Policy: frame-ancestors tai X-Frame-Options | Clickjacking: toinen sivusto lataa sivusi näkymättömästi kehykseen, jolloin kävijät klikkaavat huomaamattaan sinun painikkeitasi. | frame-ancestors 'self', tai vanhempi header X-Frame-Options: SAMEORIGIN |
Referrer-Policy | Kun klikataan toiselle sivustolle, selain lähettää mukana edellisen sivun osoitteen, joskus mukana hakutermi tai tilausnumero. | strict-origin-when-cross-origin, tai tiukemmin same-origin tai no-referrer. Internet.nl pitää hyväksyttävinä vain tiukkoja arvoja. |
Permissions-Policy | Määrittää, mitä selainominaisuuksia sivusi ja upotetut kehykset saavat käyttää, kuten kamera, mikrofoni ja sijainti. | camera=(), microphone=(), geolocation=() sulkee nämä kolme pois käytöstä. Jos sivustosi käyttää jotakin näistä, jätä se pois. |
Content-Security-Policy (täysi) | Rajoittaa, mistä paikoista skriptit, tyylit ja kuvat saavat latautua. Tämä tekee haitallisten skriptien lisäämisestä (XSS) paljon vaikeampaa. | Räätälöinti sivustokohtaisesti. Vältä unsafe-inline, unsafe-eval ja jokerimerkkejä. |
Käyttöönotto .htaccess-tiedostossa
Lisää nämä rivit tiedoston .htaccess alkuun domainisi public_html-kansiossa. Tee ensin varmuuskopio tiedostosta.
<IfModule mod_headers.c> 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" Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()" # Vain jos HSTS-kytkin DirectAdminissa on pois päältä: # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Lisää includeSubDomains vasta kun olet varma, että jokaisella alidomainilla on https käytössä. Jos käytät WordPressiä, voit ottaa headerit käyttöön myös laajennuksen avulla. Valitse tunnettu laajennus, jota vielä päivitetään, ja määritä jokainen header vain yhteen paikkaan: joko laajennuksessa tai .htaccess-tiedostossa.
Content-Security-Policy-Report-Only. Se ei estä mitään, mutta näyttää selaimen konsolissa, mitä estettäisiin. Jätä tämä epäselvissä tapauksissa verkkosivustosi tekijän hoidettavaksi, tai aloita vain frame-ancestors-säännöllä.Testaaminen
- Internet.nl: syötä domainisi internet.nl:n sivustotestiin osoitteessa internet.nl.
- Selaimesi: avaa sivustosi, paina F12 (tai valitse Tarkastele), siirry välilehdelle Verkko (Network), lataa sivu uudelleen ja klikkaa ensimmäistä pyyntöä. Kohdassa Vastausheaderit (Response Headers) näet kaiken, mitä palvelimesi lähettää mukana.
- Komentorivi:
curl -sI https://sinundomainisi.fi/näyttää headerit.
Tarkista jokaisen muutoksen jälkeen, että sivustosi, lomakkeesi ja maksusivusi toimivat edelleen. Pidä lisäksi sisällönhallintajärjestelmäsi, laajennuksesi ja teemasi päivitettyinä. Katso WordPressin wp-login.php-tiedoston suojaaminen.
Lisätietoa
- MDN: Strict-Transport-Security (englanniksi)
- MDN: Content-Security-Policy (englanniksi)
- MDN: Permissions-Policy (englanniksi)
- HSTS-esilataus listalle (englanniksi)
