Siirry suoraan sisältöön

Evästeasetukset

Valitse, mitä evästetyyppejä sallit. Voit muuttaa valintaasi milloin tahansa jokaisen sivun alareunassa olevasta kohdasta Evästeasetukset. Tietosuojaseloste

Välttämättömät

Aina käytössä

Tarvitaan sisäänkirjautumiseen, ostoskorin säilyttämiseen ja valintojesi muistamiseen. Nämä ovat aina käytössä.

Mitkä evästeet?
  • weboke_sessie, weboke_klant, weboke_remember: istuntosi ja sisäänkirjautuneena pysyminen
  • weboke_basket: ostoskorisi
  • wkBtwIncl: hintojen näyttäminen verollisina tai verottomina
  • wok_cookies: evästevalintasi, 12 kuukautta

Mittaa, mikä mainos johtaa käyntiin tai tilaukseen, jotta emme maksa mainoksista, joista ei ole hyötyä.

Mitkä evästeet?
  • Google Ads Google Tag Managerin kautta (_gcl_au, _gcl_aw), enintään 90 päivää
  • OpenAI Ads, mainokset ChatGPT-palvelussa
  • wok_aff: minkä kumppanin kautta tulit meille (kumppaniohjelma), 60 päivää

4,6

Maa ja kieli

Jokaisella maalla on oma sivustonsa, jossa on kyseisen maan hinnat ja ALV.

Näytä

Caddy, HSTS ja security.txt

Moduuli 7: Verkkotunnus, verkkopalvelin ja https · Lukuaika: 12 minuuttia

Tavoite: Tämän oppitunnin jälkeen osaat käyttää Caddya helppona verkkopalvelimena, jossa on automaattinen https, ottaa käyttöön HSTS:n ja tärkeimmät suojausotsakkeet (Caddyssa ja nginxissä) ilman, että sivustosi lakkaa näkymästä, ja julkaista kelvollisen security.txt-tiedoston.

Keskeiset käsitteet: Caddy, Caddyfile, automaattinen https, reverse_proxy, file_server, header, HSTS (Strict-Transport-Security), max-age, includeSubDomains, preload, X-Content-Type-Options, frame-ancestors, Referrer-Policy, security.txt, Contact, Expires, /.well-known/

Caddy: https ilman huolia

Oppitunneilla 7.2 ja 7.3 rakensit nginxillä ja certbotilla sivuston, jossa on https. Siihen tarvittiin kaksi ohjelmaa, muutama tiedosto ja ajastin. Caddy hoitaa kaiken yhdellä ohjelmalla: se on verkkopalvelin, jossa on sisäänrakennettu ACME-asiakas. Kun nimi on määrityksissä, nimi osoittaa palvelimeen ja portit 80 ja 443 ovat avoinna, Caddy hakee varmenteen itse, uusii sen ajoissa ja ohjaa http-liikenteen https:ään.

Caddy löytyy Debianin ja Ubuntun pakettilähteestä (hieman vanhempana versiona). Tekijät tarjoavat myös oman apt-lähteen, jossa on uusin versio, omalla avaimellaan ja Signed-By-määrityksellä kuten oppitunnilla 4.1. Moduulissa 9 Caddy toimii konttina Docker-palveluidesi edessä (oppitunti 9.4). Tässä käytät sitä tavallisena palveluna.

anna@web1:~$ sudo apt install caddy
anna@web1:~$ systemctl status caddy

Käytä porteissa 80 ja 443 joko nginxiä tai Caddya, älä molempia: vain yksi ohjelma voi kuunnella samaa porttia.

Caddyfile

Määritykset ovat tiedostossa /etc/caddy/Caddyfile. Staattinen sivusto ja sovellus käänteisen välityspalvelimen takana:

example.com, www.example.com {
	root * /var/www/example.com
	file_server
	encode zstd gzip
}

app.example.com {
	reverse_proxy 127.0.0.1:3000
}

Siinä kaikki. Caddy kuuntelee itsestään sekä IPv4:ää että IPv6:ta, hakee varmenteet kolmelle nimelle, ohjaa http:n https:ään ja välittää reverse_proxy-määrityksessä otsakkeet X-Forwarded-For ja X-Forwarded-Proto automaattisesti (nginxissä teit tämän käsin, oppitunti 7.2).

Testaus ja uudelleenlataus toimivat kuten nginxissä:

anna@web1:~$ caddy validate --config /etc/caddy/Caddyfile
Valid configuration
anna@web1:~$ sudo systemctl reload caddy
anna@web1:~$ sudo journalctl -u caddy -f

Journalista näet varmenteiden haun. Jos jokin menee pieleen, syy näkyy siellä: yleensä sama kuin certbotissa (portti 80 kiinni, nimi osoittaa muualle tai IPv6 ei toimi; oppitunti 7.3).

HSTS: selain muistaa, että sivusto on https

Ohjauksessa http:stä https:ään on yksi heikko kohta: aivan ensimmäinen pyyntö kulkee vielä salaamattomana http:n kautta. Samassa verkossa oleva voi siepata sen ja pitää kävijän http:ssä. HSTS (HTTP Strict Transport Security, RFC 6797) ratkaisee tämän. Sivustosi lähettää https:n kautta tämän otsakkeen:

Strict-Transport-Security: max-age=31536000

Selain muistaa silloin vuoden ajan (31.536.000 sekuntia), että tähän nimeen saa yhdistää vain https:llä. Jos kävijä myöhemmin kirjoittaa http://, selain muuttaa sen itse https:ksi jo ennen kuin mitään lähtee verkkoon. Selain ei välitä http:n kautta tulevasta HSTS-otsakkeesta; se huomioidaan vain https:n kautta.

Asialla on kääntöpuolensa. Jos selain on tallentanut HSTS:n ja näkee varmennevirheen (vanhentunut, väärä nimi), kävijä ei saa painiketta, jolla jatkaa silti. Sivustosi on silloin näille kävijöille saavuttamaton, kunnes varmenne on kunnossa. Siksi:

  1. Ota HSTS käyttöön vasta, kun https toimii kaikkialla ja uusiminen on automaattista (oppitunti 7.3).
  2. Aloita lyhyellä max-age-arvolla, esimerkiksi yhdellä päivällä (86400), ja nosta sitä vaiheittain vuoteen.
  3. Ole varovainen includeSubDomains-asetuksen kanssa: se koskee jokaista aliverkkotunnusta, myös vanhaa aliverkkotunnusta, jossa on laite tai palvelu ilman kelvollista varmennetta.
  4. preload pyytää pääsyä selaimiin sisäänrakennetulle listalle (hstspreload.org). Sitä varten vaaditaan muun muassa vähintään vuoden max-age, includeSubDomains ja https kaikissa aliverkkotunnuksissa. Listalta poistuminen kestää kuukausia. Tee tämä vain, jos olet varma, että koko verkkotunnus on pysyvästi https.

Muut suojausotsakkeet

HSTS:n lisäksi on muutama otsake, jotka auttavat paljon pienellä vaivalla:

OtsakeMitä vastaanAloitusarvo
X-Content-Type-Optionsselain arvaa, millainen tiedosto on, jolloin ladattu "kuva" voi suoritua skriptinänosniff
Content-Security-Policy: frame-ancestors (tai vanhempi X-Frame-Options)clickjacking: toinen sivusto lataa sivusi näkymättömänä kehykseenframe-ancestors 'self' (tai X-Frame-Options: SAMEORIGIN)
Referrer-Policysivusi osoite (hakusanoineen tai tilausnumeroineen) vuotaa muille sivustoillestrict-origin-when-cross-origin

Täydellinen Content-Security-Policy (mitkä skriptit ja tyylit saa ladata) räätälöidään sivustokohtaisesti eikä kuulu tähän kurssiin; aloita pelkällä frame-ancestors-määrityksellä.

Caddyssa asetat ne header-direktiivillä sivuston lohkossa:

example.com, www.example.com {
	root * /var/www/example.com
	file_server
	header {
		Strict-Transport-Security "max-age=31536000"
		X-Content-Type-Options "nosniff"
		Content-Security-Policy "frame-ancestors 'self'"
		Referrer-Policy "strict-origin-when-cross-origin"
		-Server
	}
}

Caddy ei aseta HSTS:ää eikä näitä otsakkeita itse, joten ne pitää todella lisätä. -Server poistaa otsakkeen Server. Oppitunnilla 9.4 lisäät samanlaiseen lohkoon oman otsakkeesi X-Weboke-Cursus tehtävää varten.

nginxissä lisäät samat rivit portin 443 server-lohkoon:

add_header Strict-Transport-Security "max-age=31536000" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Content-Security-Policy "frame-ancestors 'self'" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

always varmistaa, että ne lähetetään myös virhesivujen mukana. Huomaa nginxin tunnettu sudenkuoppa: jos location-lohkossa on itsessään yksikin add_header, server-lohkon add_header-rivit eivät enää koske kyseistä locationia. Tarkista siksi aina lopputulos:

anna@laptop:~$ curl -sI https://example.com | grep -iE 'strict|nosniff|frame|referrer'
strict-transport-security: max-age=31536000
x-content-type-options: nosniff
content-security-policy: frame-ancestors 'self'
referrer-policy: strict-origin-when-cross-origin

security.txt: näin sinulle voi ilmoittaa haavoittuvuudesta

Oletetaan, että joku löytää palvelimeltasi haavoittuvuuden, kuten avoimen hakemiston tai vanhentuneen palvelun. Mistä hän tietää, ketä varoittaa? Sitä varten on security.txt (RFC 9116): pieni tekstitiedosto vakiopaikassa, https://<jouwdomein>/.well-known/security.txt.

Contact: mailto:security@example.com
Expires: 2027-10-31T23:00:00Z
Preferred-Languages: nl, en
Canonical: https://example.com/.well-known/security.txt

Säännöt:

  • Contact on pakollinen: mailto:-, https://- tai tel:-osoite, johon ilmoitukset tulevat. Käytä osoitetta, jota joku oikeasti lukee.
  • Expires on pakollinen ja saa esiintyä vain kerran: päivämäärä, jonka jälkeen tiedostoa pidetään vanhentuneena. RFC suosittelee päivämäärää vuoden sisällä. Näin ei jää voimaan tiedostoa, jossa on kauan sitten unohdettu osoite. Merkitse kalenteriisi, milloin se pitää uusia.
  • Preferred-Languages, Canonical ja Policy (linkki ilmoituskäytäntöösi) ovat valinnaisia.
  • Tiedoston on tultava https:n kautta pelkkänä tekstinä (text/plain, UTF-8). Vanha sijainti /security.txt on sallittu lisänä, mutta /.well-known/ menee edelle.

Tiedoston lisääminen staattiselle sivustolle:

anna@web1:~$ sudo mkdir -p /var/www/example.com/.well-known
anna@web1:~$ sudoedit /var/www/example.com/.well-known/security.txt
anna@laptop:~$ curl -sI https://example.com/.well-known/security.txt | grep -i content-type
content-type: text/plain; charset=utf-8

Jos käytät nginxissä oppitunnin 7.2 turvaverkkoa location ~ /\. { deny all; }, lisää sen eteen poikkeus: location ^~ /.well-known/ { }. Käänteisen välityspalvelimen takana olevalle sovellukselle voit Caddyssa ohjata polun /.well-known/security.txt tiedostoon handle-lohkolla ja file_server-määrityksellä.

Yleinen virhe: sivusto tai sovellus vastaa jokaiseen tuntemattomaan polkuun etusivulla ja tilakoodilla 200. Silloin security.txt "on olemassa", mutta se on HTML:ää. Tarkista siis myös sisältö.

AlmaLinuxissa ja Rocky Linuxissa

Caddy asennetaan niissä tekijöiden lähteestä tai EPEL/COPR-lähteestä. Kuten nginxissä, SELinuxin on sallittava käänteinen välityspalvelin (setsebool -P httpd_can_network_connect 1). Caddyfile ja otsakkeet ovat samat.

Yhteenveto

  • Caddy hoitaa varmenteet, uusimisen ja ohjauksen https:ään itse; reverse_proxy välittää oikeat otsakkeet automaattisesti.
  • HSTS saa selaimet muistamaan, että sivustosi on vain https; kasvata max-age-arvoa vähitellen, ole varovainen includeSubDomains-asetuksen kanssa ja hyvin varovainen preload-asetuksen kanssa.
  • Aseta lisäksi X-Content-Type-Options: nosniff, frame-ancestors 'self' ja Referrer-Policy; Caddyssa header-direktiivillä, nginxissä add_header ... always-rivillä, ja tarkista komennolla curl -I.
  • security.txt on osoitteessa /.well-known/security.txt, https:n kautta, pelkkänä tekstinä, ja siinä on pakollinen Contact ja yksi Expires vuoden sisällä.

Tietovisa (quiz)

1. Miksi HSTS auttaa, vaikka ohjaat jo http:n https:ään?



2. Otat HSTS:n käyttöön määrityksellä max-age=31536000; includeSubDomains. Viikkoa myöhemmin huomaat, ettei camera.example.com ole kelvollista varmennetta. Mitä sivustollasi aiemmin käyneet huomaavat?



3. Mitkä kentät ovat pakollisia security.txt-tiedostossa?



4. Olet lisännyt nginxissä suojausotsakkeet server-lohkoon, mutta osoitteessa /api/ ne eivät tule mukaan. Lohkossa location /api/ on yksi oma add_header. Mistä on kyse?



5. Mitä sinun pitää tehdä ennen kuin lisäät preload-asetuksen HSTS-otsakkeeseen?



Tehtävä

Tehtävä Z7.4: HSTS, otsakkeet ja security.txt. Ota sivustollesi käyttöön HSTS (vähintään 180 päivää, kun https on toiminut hyvin jonkin aikaa), X-Content-Type-Options: nosniff ja frame-ancestors 'self' (tai X-Frame-Options), ja julkaise security.txt, jossa on Contact ja Expires vuoden sisällä. Syötä palvelimesi nimi. Ohjelma hakee osoitteen https://<hostnaam>/ ja tarkistaa otsakkeet sekä hakee osoitteen https://<hostnaam>/.well-known/security.txt ja tarkistaa kentät. Se ei tallenna mitään muuta kuin tuloksen ja Expires-päivämäärän.

Tehtävä Z7.4: HSTS, otsakkeet ja security.txt

Vain kirjautuneille opiskelijoille. Haemme osoitteet https://<naam>/ ja /.well-known/security.txt (vain GET).




Sitä, mitä kirjoitat ja mitä löydämme, ei tallenneta. Selaimesi muistaa vastauksesi ja sen, oletko suorittanut tehtävän. Jos olet kirjautunut sisään, tallennamme kohtaan Omat kurssit vain sen, että tehtävä oli (lähes) oikein; voit poistaa sen myös sieltä.

Lue lisää

Hetkinen…

Määritä verkkotunnuksesi

Määritä kullekin verkkotunnukselle nimipalvelimet, liitos webhotelliin ja se, kuka tulee omistajaksi.

Ladataan verkkotunnuksia…