Turinio saugumo politika (CSP) pradedantiesiems
Turinio saugumo politika (CSP) yra galingiausia apsauga, kokią svetainė gali turėti prieš kenkėjiškų scenarijų įterpimą (XSS). Ji veikia pateikdama naršyklei aiškų sąrašą, iš kur gali būti įkelti scenarijai, stiliai ir kiti ištekliai — todėl net jei užpuolikas įterps kodą į jūsų puslapį, naršyklė atsisakys jį paleisti.
Trumpai
CSP yra Content-Security-Policy antraštė, sudaryta iš direktyvų, tokių kaip default-src ir script-src. Ji galinga, bet lengva ja sugadinti savo pačių svetainę, todėl visada pradėkite Content-Security-Policy-Report-Only režimu, stebėkite, ką ji būtų užblokavusi, ir tik tada įjunkite. Ar jūsų svetainė siunčia politiką, patikrinsite mūsų antraščių tikrinimu.
Ką CSP iš tikrųjų daro
Kenkėjiškų scenarijų įterpimas (XSS) įvyksta tada, kai užpuolikui pavyksta įterpti savo JavaScript į puslapį, kuriuo jūsų vartotojai pasitiki. Toks scenarijus gali pavogti seansus, perrašyti puslapį arba nutekinti duomenis. CSP apverčia modelį iš „leisk vykdyti bet ką puslapyje“ į „vykdyk tik tai, ką svetainės savininkas patvirtino“. Taisykles vykdo naršyklė, todėl vartotojai apsaugomi net nuo įterpimo kelių, apie kuriuos nė nežinojote.
Kaip sudaryta antraštė
Politika yra kabliataškiais atskirtų direktyvų seka. Kiekviena direktyva įvardija išteklių tipą ir išvardija jam leidžiamus šaltinius.
Content-Security-Policy: default-src 'self'; script-src 'self'; img-src 'self' data:; object-src 'none'; frame-ancestors 'self'
Dažniausios direktyvos:
| Direktyva | Ką valdo |
|---|---|
default-src | Atsarginis nustatymas bet kuriam išteklių tipui, kurio aiškiai neišvardijate. |
script-src | Iš kur gali būti įkeltas JavaScript. Saugumui svarbiausia direktyva. |
style-src | Iš kur gali būti įkeltas CSS. |
img-src | Iš kur gali būti įkelti paveikslėliai. |
frame-ancestors | Kas gali įterpti jūsų puslapį į rėmelį — modernus X-Frame-Options pakaitalas. |
object-src | Įskiepiai, tokie kaip Flash ar Java. Beveik kiekvienoje svetainėje nustatykite 'none'. |
Raktažodis 'self' reiškia „ta pati kilmė kaip puslapio“. 'none' blokuoja viską. Taip pat galite išvardyti konkrečius serverio adresus, pvz., https://cdn.example.com.
Įterpti scenarijai, nonce ir maišos
Sunkioji CSP dalis yra ta, kad stipri politika draudžia įterptus <script> blokus ir onclick= tvarkykles, nes būtent taip paleidžiamas įterptas kodas. Turite du saugius būdus leisti konkrečius įterptus scenarijus, kuriuos iš tikrųjų parašėte patys:
<!-- Nonce: atsitiktinė reikšmė, pergeneruojama kiekviename atsake -->
Content-Security-Policy: script-src 'self' 'nonce-r4nd0m123'
<script nonce="r4nd0m123">/* jūsų kodas */</script>
Nonce yra vienkartinis atsitiktinis raktas, kurį įrašote ir į antraštę, ir į kiekvieną patikimą scenarijaus žymę; naršyklė paleidžia tik sutampančias žymes. Maiša, pvz., 'sha256-...', leidžia jums patvirtinti konkretų scenarijų pagal tikslų jo turinį. Venkite 'unsafe-inline' — jis išjungia apsaugą. Geriausias ilgalaikis tikslas yra nonce pagrindu veikianti politika, kad nė vienas nepatvirtintas scenarijus negalėtų pasileisti.
Diekite naudodami report-only režimą
Įdiegus griežtą politiką aklai, beveik neabejotinai kažkas suges. Vietoj to pirmiausia išleiskite ją report-only režimu:
Content-Security-Policy-Report-Only: default-src 'self'; script-src 'self' 'nonce-...'; report-uri /csp-report
Šiuo režimu naršyklė praneša, ką ji būtų užblokavusi, bet iš tikrųjų nieko neblokuoja. Renkate pažeidimų ataskaitas, pastebite teisėtus išteklius, kuriuos pamiršote leisti — analitikos scenarijų, šriftų serverį, įterptą vaizdo įrašą — ir plečiate politiką, kol ataskaitos nutyla. Tada pakeiskite antraštės pavadinimą į Content-Security-Policy, kad įsigaliotų.
'unsafe-inline' arba pakaitos ženklą * į script-src, kad išnyktų klaidos, sugriaunama visa CSP prasmė. Jei jums reikia įterptų scenarijų, naudokite nonce arba maišą, o ne atverkite duris bet kokiam scenarijui.Kur CSP dera
CSP frame-ancestors direktyva modernioms naršyklėms taip pat pakeičia senesnę X-Frame-Options antraštę apsaugai nuo „clickjacking“. Tai vienas vertingiausių įrašų pilname saugumo antraščių kontroliniame sąraše. Kai jūsų politika įsigalios, atlikite patikrą, kad įsitikintumėte, jog ji siunčiama teisingai.
Dažniausiai užduodami klausimai
Ar CSP sugadins mano trečiųjų šalių scenarijus?
Gali, jei pamiršite išvardyti jų serverius. Būtent todėl pradedate report-only režimu: jis atskleidžia kiekvieną išorinį šaltinį, kurį jūsų puslapiai iš tiesų naudoja, dar prieš ką nors įjungiant.
Ar man vis tiek reikia valyti vartotojo įvestį?
Taip. CSP yra stipri antra gynybos linija, o ne pakaitalas išvesties ekranavimui ir įvesties tikrinimui. Laikykite ją vienu sluoksniu tarp kelių.
Kuo skiriasi nonce ir maiša?
Nonce yra naujas atsitiktinis raktas, pridedamas prie patikimų scenarijų žymių kiekviename atsake; maiša leidžia konkretų scenarijų pagal tikslaus jo turinio atspaudą. Dinamiškiems puslapiams nonce paprastai lengviau prižiūrėti.
Susiję vadovai
HTTP saugumo antraštės: pilnas kontrolinis sąrašas
Visos svarbios HTTP saugumo antraštės, nuo ko jos apsaugo ir paruošta pradinė konfigūracija.
Skaityti →HTTP saugumo antraštėsHSTS paaiškinimas: Strict-Transport-Security teisingai
Kaip HSTS priverčia naudoti HTTPS, ką reiškia „preload“ sąrašas ir kaip jį įdiegti neužsirakinant.
Skaityti →HTTP saugumo antraštėsX-Frame-Options ir apsauga nuo „clickjacking“
Kaip veikia „clickjacking“ atakos ir kaip X-Frame-Options bei frame-ancestors neleidžia įterpti jūsų svetainės.
Skaityti →Patikrinkite savo svetainę pagal šį vadovą
Atlikite nemokamą ScanOpsPro patikrą ir pažiūrėkite, kaip jūsų svetainė tvarkosi su pagrindais.
Atlikti nemokamą patikrą