HSTS ja suojausotsikot verkkosivustollesi
Jokaisen sivun mukana verkkopalvelimesi lähettää headerit: lyhyitä rivejä, jotka sisältävät ohjeita selaimelle. Ne määrittävät osittain, miten turvallisesti selain käsittelee sivustoasi. Täältä luet mitä HSTS on, mitä muita tietoturvaheadereita on olemassa ja miten ne asetetaan ja testataan.
Ensin sivustollasi täytyy olla toimiva sertifikaatti ja sen täytyy ohjata kävijät https-osoitteeseen. Lue tästä: SSL-sertifikaatin aktivointi, uusiminen ja ongelmien ratkaisu ja Kävijöiden pakollinen ohjaus https-osoitteeseen.
Mitä HSTS tekee?
Https-osoitteeseen ohjaamisessa on yksi heikko hetki: ensimmäinen pyyntö http:n kautta kulkee vielä salaamattomana. Joku samassa verkossa, esimerkiksi julkisessa wifissä, voi siepata kyseisen pyynnön. HSTS (HTTP Strict Transport Security) ratkaisee tämän. Sivustosi lähettää https:n kautta tämän headerin:
Strict-Transport-Security: max-age=31536000
Selain muistaa tällöin, että sen täytyy avata sivustosi vain https:n kautta. Jos kävijä kirjoittaa myöhemmin http://, selain muuttaa sen itse https:ksi, jo ennen kuin mitään lähetetään verkon kautta. Tavallisen http:n kautta tulevan HSTS-headerin selain jättää huomiotta.
| Osa | Merkitys |
|---|---|
max-age | Kuinka kauan selain muistaa sen, sekunteina. Internet.nl:n testi pitää vähintään vuotta (31536000) riittävänä. |
includeSubDomains | Koskee myös kaikkia alidomaineja, kuten shop.sinundomeinisi.nl ja mail.sinundomeinisi.nl. |
preload | Pyydät pääsyä listalle, joka on sisäänrakennettu selaimiin (hstspreload.org). Tällöin jopa ensimmäinen käynti on suojattu. Tämä vaatii muun muassa vuoden, includeSubDomains-asetuksen ja https:n kaikilla alidomaineilla. Listalta poistuminen kestää kauan. |
max-age=0 | Poistaa muistetun ohjeen seuraavan https-vierailun yhteydessä. |
includeSubDomains-asetuksen kanssa 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 asteittain vuoteen asti.HSTS WebOké:ssa
Useimmilla palvelimillamme verkkopalvelin lähettää HSTS:n oletuksena jokaiselle sivustolle, joka avataan https:n kautta: Strict-Transport-Security: max-age=31536000. Tämä on vuosi, ilman includeSubDomains-asetusta ja ilman preload-asetusta. Sinun ei tarvitse tehdä mitään tämän eteen. Muutamalla palvelimella se ei ole oletuksena päällä; siellä otat sen itse käyttöön. Näet selaimesi kehittäjätyökaluista tai internet.nl-testistä (katso alla), lähettääkö sivustosi jo HSTS:ää ja millä max-age-arvolla.
HSTS-kytkin DirectAdminissa
DirectAdminissa mene kohtaan Domains ja klikkaa domainnimeäsi. Jos Secure SSL Connection on päällä, näet HSTS-kohdassa kytkimen Enable HTTP Strict Transport Security. Klikkaa sen jälkeen Edit tallentaaksesi. Vaihe vaiheelta ohjeet löydät täältä: Kävijöiden aina ohjaaminen https-osoitteeseen.
Jos sivustosi lähettää jo HSTS:ää, et tarvitse kytkintä. Ota se käyttöön vain jos sivustosi ei vielä lähetä HSTS:ää. Aseta HSTS vain yhdessä paikassa: DirectAdminissa tai .htaccess-tiedostossa, ei molemmissa. Jos selain saa kaksi HSTS-headeria, se käyttää vain ensimmäistä.
Muut tietoturvaheaderit
| Header | Mitä vastaan | Arvo josta aloittaa |
|---|---|---|
X-Content-Type-Options | Selain alkaa itse arvata, 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 painikkeitasi. | frame-ancestors 'self', tai vanhempi header X-Frame-Options: SAMEORIGIN |
Referrer-Policy | Kun klikataan toiselle sivustolle, selain lähettää edellisen sivun osoitteen mukana, joskus hakutermin tai tilausnumeron kera. | strict-origin-when-cross-origin, tai tiukemmin same-origin tai no-referrer. Internet.nl pitää vain tiukkoja arvoja hyvinä. |
Permissions-Policy | Määrittää mitkä selaintoiminnot sivusi ja upotetut kehykset saavat käyttää, kuten kamera, mikrofoni ja sijainti. | camera=(), microphone=(), geolocation=() sulkee nämä kolme pois. Jos sivustosi käyttää jotakin näistä toiminnoista, jätä se pois. |
Content-Security-Policy (täydellinen) | Rajoittaa mistä paikoista skriptit, tyylit ja kuvat voivat latautua. Tämä tekee haitallisten skriptien (XSS) lisäämisestä paljon vaikeampaa. | Räätälöity jokaiselle sivustolle. Vältä unsafe-inline, unsafe-eval ja wildcardeja. |
Asettaminen .htaccess-tiedostossa
Lisää nämä rivit domainisi public_html-kansion .htaccess-tiedoston alkuun. Tee ensin kopio 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 sivustosi ei vielä lähetä HSTS:ää (katso yllä): # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Lisää includeSubDomains vasta kun olet varma, että jokaisella alidomainilla on https. Jos käytät WordPressiä, voit asettaa headerit myös pluginilla. Valitse tunnettu plugin, jota vielä päivitetään, ja aseta jokainen header vain yhdessä paikassa: pluginissa 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 websitetestiin 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ää.
- Komentorivi:
curl -sI https://sinundomeinisi.nl/näyttää headerit.
Tarkista jokaisen muutoksen jälkeen, että sivustosi, lomakkeet ja maksusivu toimivat vielä. Pidä lisäksi CMS, pluginit ja teemat päivitettyinä. Katso WordPressin wp-login.php-tiedoston suojaaminen.
Lue lisää
- MDN: Strict-Transport-Security (englanniksi)
- MDN: Content-Security-Policy (englanniksi)
- MDN: Permissions-Policy (englanniksi)
- HSTS-preload-lista (englanniksi)
