Kokios saugumo antraštės reikalingos ir ką jos daro?

Įprastai svetainei pakanka šešių: HSTS, Content-Security-Policy, X-Content-Type-Options, Referrer-Policy, X-Frame-Options ir Permissions-Policy. Penkios iš jų yra viena eilutė serverio konfigūracijoje, o CSP reikalauja derinimo — todėl ji ir duoda daugiausiai.

SeoScore

Saugumo antraštės yra nurodymai naršyklei, ką ji gali daryti su tavo puslapiu. Be jų naršyklė elgiasi atlaidžiausiai įmanomu būdu — ne todėl, kad tai saugu, o todėl, kad senos svetainės kitaip neveiktų.

Šešios uždaro didžiąją dalį. Penkios iš jų yra po vieną eilutę.

Penkios, kurias galima įdėti dabar

Strict-Transport-Security — naršyklė metus laiko net nebandys HTTP. Uždaro pirmo apsilankymo langą, kai lankytojas įveda adresą be https://.

X-Content-Type-Options: nosniff — draudžia naršyklei spėti failo tipą. Be jo įkeltas „paveikslėlis" gali būti įvykdytas kaip skriptas.

Referrer-Policy — kiek adreso atiduodam svetimai svetainei. Be jo pilnas adresas su visais parametrais keliauja kiekvienam, į ką rodo nuoroda.

X-Frame-Options: SAMEORIGIN — draudžia įdėti tavo puslapį į svetimą rėmą. Apsaugo nuo paspaudimo, kuris atrodo kaip vienas dalykas, o yra kitas.

Permissions-Policy — išjungia tai, ko puslapiui nereikia: kamera, mikrofonas, geolokacija, mokėjimai.

Šeštoji: Content-Security-Policy

CSP pasako, iš kur naršyklei leidžiama krauti skriptus, stilius ir paveikslėlius. Tai vienintelė antraštė, realiai sustabdanti įterptą kodą — ir vienintelė, kurią įdėjus neatsargiai puslapis nustoja veikti.

Todėl ji derinama žingsniais:

  1. Content-Security-Policy-Report-Only — politika galioja, bet nieko neblokuoja, tik praneša;
  2. surenkami pranešimai, papildomi tikrai reikalingi šaltiniai;
  3. tik tada perjungiama į tikrą režimą.

Pirmoji versija beveik visada per griežta. Tai normalu — tam ir yra Report-Only.

Ko įprastai svetainei NEREIKIA

Du dalykai prašomi skenerių ir abu įprastai svetainei kainuoja daugiau, nei duoda:

Cross-Origin-Embedder-Policy galioja ir įdėtiems rėmams: kiekvienas iframe privalo deklaruoti tą pačią politiką. Įdėjus jį, dažniausiai nustoja veikti mokėjimų langai, žemėlapiai ir apsaugos nuo botų.

require-trusted-types-for reikalauja, kad kiekvienas įrašymas į DOM eitų per patvirtintą politiką. Dauguma bibliotekų tokios politikos nekuria, todėl rezultatas — sulaužytas puslapis.

Abu reikalingi tada, kai svetainei reikia cross-origin izoliacijos. Reikalauti jų iš įprastos svetainės reiškia kurti problemą iš nieko.

Susiję straipsniai

Ta pati tema iš kitos pusės — kiekvienas atsako į savo klausimą:

Kaip tai patenka į balą, aprašyta ties ką tikriname.

Šaltiniai

Tai, kuo remiasi šis tekstas — pirminiai šaltiniai, ne perpasakojimai:

Šešios, ir jų pakanka — HSTS — naršyklė nebebando HTTP; CSP — iš kur leidžiama krauti skriptus; X-Content-Type-Options — jokio tipo spėjimo; Referrer-Policy — kiek adreso atiduodam; X-Frame-Options — apsauga nuo įdėjimo į rėmą.

Dažni klausimai

Ar verta įtraukti domeną į HSTS preload sąrašą?

Tik tada, kai esi tikras. Įtraukimas reiškia, kad naršyklės niekada nebandys HTTP tavo domenui **ir visiems poddomeniams**, o pašalinimas trunka mėnesius. Vienas pamirštas vidinis poddomenis be sertifikato tampa nepasiekiamas.

Kur šitas antraštes dėti?

Serverio arba CDN konfigūracijoje, ne programos kode. Taip jos galioja ir statiniams failams, ir klaidų puslapiams — būtent ten dažniausiai ir dingsta.

Ar CSP apsaugo nuo visko?

Ne. Ji apsaugo nuo įterpto skripto vykdymo. Nuo pavogto slaptažodžio ar spragos serveryje ji neapsaugo niekaip.

Kaip patikrinti, ar jos veikia?

Naršyklės kūrėjų įrankiuose, skiltyje „Network", pasirink pirmą užklausą ir peržiūrėk atsakymo antraštes. Ten matyti tiksliai tai, ką siunčia serveris.

Pasitikrink

Nemokamas skenas parodo, ką iš to, kas aprašyta, tavo svetainė jau daro, o ko — ne.

Skenuoti svetainę →