Pereiti prie turinio

Slapukų nustatymai

Pasirinkite, kokių rūšių slapukus leidžiate. Pasirinkimą bet kada galite pakeisti per „Slapukų nustatymai“ kiekvieno puslapio apačioje. Privatumo pareiškimas

Būtinieji

Visada įjungti

Reikalingi prisijungti, išsaugoti krepšelį ir įsiminti Jūsų pasirinkimus. Jie visada įjungti.

Kokie slapukai?
  • weboke_sessie, weboke_klant, weboke_remember: Jūsų sesija ir prisijungimo išlaikymas
  • weboke_basket: Jūsų krepšelis
  • wkBtwIncl: kainų rodymas su PVM arba be PVM
  • wok_cookies: Jūsų slapukų pasirinkimas, 12 mėnesių

Matuoja, kuri reklama atveda prie apsilankymo ar užsakymo, kad nemokėtume už neveiksmingas reklamas.

Kokie slapukai?
  • Google Ads per Google Tag Manager (_gcl_au, _gcl_aw), iki 90 dienų
  • OpenAI Ads, reklamos ChatGPT
  • wok_aff: per kurį partnerį atėjote pas mus (partnerių programa), 60 dienų

4,6

Šalis ir kalba

Kiekviena šalis turi savo svetainę su tos šalies kainomis ir PVM.

Peržiūrėti

Caddy, HSTS ir security.txt

7 modulis: Domenas, žiniatinklio serveris ir https · Skaitymo laikas: 12 min.

Mokymosi tikslas: Po šios pamokos galėsite naudoti Caddy kaip paprastą žiniatinklio serverį su automatiniu https, nustatyti HSTS ir svarbiausias saugumo antraštes (Caddy ir nginx) taip, kad Jūsų svetainė netaptų nepasiekiama, ir paskelbti galiojantį security.txt failą.

Pagrindinės sąvokos: Caddy, Caddyfile, automatinis 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 be rūpesčių

7.2 ir 7.3 pamokose su nginx ir certbot sukūrėte svetainę su https. Tai dvi programos, keli failai ir laikmatis. Caddy viską atlieka viena programa: tai žiniatinklio serveris su įtaisytu ACME klientu. Jei konfigūracijoje nurodytas vardas, jis rodo į serverį, o 80 ir 443 prievadai pasiekiami, Caddy pats gauna sertifikatą, laiku jį atnaujina ir nukreipia http į https.

Caddy yra Debian ir Ubuntu paketų saugykloje (šiek tiek senesnė versija); kūrėjai taip pat siūlo savo apt saugyklą su naujausia versija, su atskiru raktu ir Signed-By, kaip 4.1 pamokoje. 9 modulyje Caddy veiks kaip konteineris Jūsų Docker paslaugoms (9.4 pamoka). Čia jį naudosite kaip įprastą paslaugą.

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

80 ir 443 prievaduose naudokite arba nginx, arba Caddy, ne abu kartu: prievadu gali klausytis tik viena programa.

Caddyfile

Konfigūracija yra /etc/caddy/Caddyfile. Statinė svetainė ir programa už atvirkštinio tarpinio serverio (reverse proxy):

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
}

Tai viskas. Caddy automatiškai klausosi IPv4 ir IPv6, užsako sertifikatus trims vardams, nukreipia http į https, o su reverse_proxy automatiškai perduoda antraštes X-Forwarded-For ir X-Forwarded-Proto (tai, ką nginx atlikote rankiniu būdu, 7.2 pamoka).

Tikrinama ir perkraunama taip pat kaip nginx:

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

Žurnale (journal) matysite, kaip gaunami sertifikatai. Jei kas nors nepavyksta, ten nurodyta priežastis: dažniausiai ta pati kaip su certbot (uždarytas 80 prievadas, vardas rodo kitur, neveikia IPv6; 7.3 pamoka).

HSTS: kad naršyklė įsimintų, jog tai https

Nukreipimas iš http į https turi vieną silpną vietą: pati pirmoji užklausa per http dar siunčiama nešifruota. Kas nors tame pačiame tinkle gali ją perimti ir palikti lankytoją naudotis http. HSTS (HTTP Strict Transport Security, RFC 6797) šią problemą išsprendžia. Jūsų svetainė per https siunčia šią antraštę:

Strict-Transport-Security: max-age=31536000

Tada naršyklė metus (31.536.000 sekundžių) įsimena, kad šis vardas pasiekiamas tik per https. Jei lankytojas vėliau įveda http://, naršyklė pati paverčia tai į https dar prieš ką nors siųsdama tinklu. HSTS antraštę, gautą per http, naršyklė ignoruoja; ji galioja tik gauta per https.

Yra ir kita pusė. Jei naršyklė įsiminė HSTS ir pamato sertifikato klaidą (pasibaigęs galiojimas, neteisingas vardas), lankytojas negauna mygtuko vis tiek tęsti. Tokiems lankytojams Jūsų svetainė bus nepasiekiama, kol sertifikatas nebus tvarkingas. Todėl:

  1. Įjunkite HSTS tik tada, kai https veikia visur, o atnaujinimas vyksta automatiškai (7.3 pamoka).
  2. Pradėkite nuo trumpo max-age, pavyzdžiui, vienos dienos (86400), ir palaipsniui didinkite iki metų.
  3. Būkite atsargūs su includeSubDomains: tai galioja kiekvienam subdomenui, taip pat senam subdomenui su įrenginiu ar paslauga be galiojančio sertifikato.
  4. preload prašo įtraukti į sąrašą, įtaisytą naršyklėse (hstspreload.org). Tam, be kita ko, reikalaujama max-age bent metams, includeSubDomains ir https visuose subdomenuose. Pašalinimas iš sąrašo trunka mėnesius. Darykite tai tik tada, kai esate tikri, kad visas domenas visam laikui naudos https.

Kitos saugumo antraštės

Be HSTS, yra kelios antraštės, kurios su mažomis pastangomis labai padeda:

AntraštėNuo ko apsaugoPradinė reikšmė
X-Content-Type-Optionsnaršyklė spėlioja, koks tai failas, todėl įkeltas „paveikslėlis“ gali būti vykdomas kaip scenarijusnosniff
Content-Security-Policy: frame-ancestors (arba senesnė X-Frame-Options)clickjacking: kita svetainė nematomai įkelia Jūsų puslapį į rėmelįframe-ancestors 'self' (arba X-Frame-Options: SAMEORIGIN)
Referrer-PolicyJūsų puslapio adresas (su paieškos žodžiais ar užsakymų numeriais) nuteka į kitas svetainesstrict-origin-when-cross-origin

Pilna Content-Security-Policy (kokius scenarijus ir stilius leidžiama įkelti) kiekvienai svetainei kuriama individualiai ir nepatenka į šio kurso apimtį; pradėkite tik nuo frame-ancestors.

Caddy jas nustatote su header direktyva svetainės bloke:

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 pats nenustato HSTS ir šių antraščių, todėl jas tikrai turite įrašyti. -Server pašalina antraštę Server. 9.4 pamokoje tokio paties tipo bloke užduočiai nustatysite savo antraštę X-Weboke-Cursus.

Naudodami nginx, tas pačias eilutes įrašykite į server bloką 443 prievadui:

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 užtikrina, kad jos būtų siunčiamos ir su klaidų puslapiais. Atkreipkite dėmesį į žinomą nginx spąstą: jei location bloke yra bent viena add_header, server bloko add_header eilutės tam location nebegalioja. Todėl visada patikrinkite rezultatą:

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: kaip Jums gali pranešti apie spragą

Tarkime, kas nors Jūsų serveryje randa spragą, pavyzdžiui, atvirą katalogą ar pasenusią paslaugą. Iš kur tas asmuo žinos, ką įspėti? Tam skirtas security.txt (RFC 9116): nedidelis tekstinis failas nustatytoje vietoje, 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

Taisyklės:

  • Contact yra privalomas: mailto:, https:// arba tel: adresas, kuriuo gaunami pranešimai. Naudokite adresą, kurį kas nors tikrai skaito.
  • Expires yra privalomas ir gali būti nurodytas tik vieną kartą: data, po kurios failas laikomas pasenusiu. RFC rekomenduoja datą ne vėliau kaip po metų. Taip neliks failo su seniai pamirštu adresu. Pasižymėkite kalendoriuje, kada jį reikės pratęsti.
  • Preferred-Languages, Canonical ir Policy (nuoroda į Jūsų pranešimų politiką) yra neprivalomi.
  • Failas turi būti pateikiamas per https, kaip paprastas tekstas (text/plain, UTF-8). Senoji vieta /security.txt leidžiama kaip papildoma, bet pirmenybė teikiama /.well-known/.

Įdėjimas statinėje svetainėje:

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

Jei nginx naudojate apsauginę taisyklę location ~ /\. { deny all; } iš 7.2 pamokos, prieš ją įrašykite išimtį: location ^~ /.well-known/ { }. Programai už atvirkštinio tarpinio serverio Caddy galite nukreipti kelią /.well-known/security.txt į failą naudodami handle bloką ir file_server.

Dažna klaida: svetainė ar programa į kiekvieną nežinomą kelią atsako pagrindiniu puslapiu ir būsena 200. Tada security.txt „egzistuoja“, bet yra HTML. Todėl patikrinkite ir turinį.

AlmaLinux ir Rocky Linux

Ten Caddy gaunamas iš kūrėjų saugyklos arba iš EPEL/COPR. Kaip ir su nginx, SELinux turi leisti atvirkštinį tarpinį serverį (setsebool -P httpd_can_network_connect 1). Caddyfile ir antraštės yra tokios pačios.

Santrauka

  • Caddy pats tvarko sertifikatus, jų atnaujinimą ir nukreipimą į https; reverse_proxy automatiškai perduoda tinkamas antraštes.
  • HSTS leidžia naršyklėms įsiminti, kad Jūsų svetainė veikia tik per https; didinkite max-age palaipsniui, būkite atsargūs su includeSubDomains ir labai atsargūs su preload.
  • Papildomai nustatykite X-Content-Type-Options: nosniff, frame-ancestors 'self' ir Referrer-Policy; Caddy su header, nginx su add_header ... always, ir patikrinkite su curl -I.
  • security.txt yra /.well-known/security.txt, pasiekiamas per https, kaip paprastas tekstas, su privalomu Contact ir vienu Expires ne vėliau kaip po metų.

Testas

1. Kodėl HSTS padeda, jei http jau nukreipiate į https?



2. HSTS nustatote su max-age=31536000; includeSubDomains. Po savaitės paaiškėja, kad camera.example.com neturi galiojančio sertifikato. Ką pastebės lankytojai, kurie anksčiau lankėsi Jūsų svetainėje?



3. Kurie laukai security.txt faile yra privalomi?



4. Naudodami nginx, saugumo antraštes įrašėte į server bloką, bet su /api/ jos nesiunčiamos. Bloke location /api/ yra viena atskira add_header. Kas vyksta?



5. Ką turite padaryti prieš pridėdami preload prie savo HSTS antraštės?



Užduotis

Užduotis Z7.4: HSTS, antraštės ir security.txt. Savo svetainei nustatykite HSTS (bent 180 dienų, kai https jau kurį laiką gerai veikia), X-Content-Type-Options: nosniff ir frame-ancestors 'self' (arba X-Frame-Options) ir paskelbkite security.txt su Contact ir Expires ne vėliau kaip po metų. Įveskite savo serverio vardą. Programa gauna https://<hostnaam>/ ir patikrina antraštes, gauna https://<hostnaam>/.well-known/security.txt ir patikrina laukus. Ji nieko neišsaugo, išskyrus rezultatą ir Expires datą.

Užduotis Z7.4: HSTS, antraštės ir security.txt

Tik prisijungusiems kursų dalyviams. Gauname https://<naam>/ ir /.well-known/security.txt (tik GET).




Ko, ką įvedate ir ką randame, nesaugome. Jūsų naršyklė atsimena Jūsų atsakymus ir tai, ar užduotį atlikote. Jei esate prisijungę, skiltyje Mano kursai išsaugome tik tai, kad užduotis buvo atlikta (ar beveik atlikta); ten tai galite ir pašalinti.

Skaitykite daugiau

Akimirką…

Nustatykite domenus

Kiekvienam domenui nustatykite vardų serverius, susiejimą su talpinimu ir tai, kas taps valdytoju.

Įkeliami Jūsų domenai…