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:

DirektyvaKą valdo
default-srcAtsarginis nustatymas bet kuriam išteklių tipui, kurio aiškiai neišvardijate.
script-srcIš kur gali būti įkeltas JavaScript. Saugumui svarbiausia direktyva.
style-srcIš kur gali būti įkeltas CSS.
img-srcIš kur gali būti įkelti paveikslėliai.
frame-ancestorsKas 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ų.

Per laisva politika suteikia klaidingą saugumo jausmą. Pridėjus '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

Patikrinkite savo svetainę pagal šį vadovą

Atlikite nemokamą ScanOpsPro patikrą ir pažiūrėkite, kaip jūsų svetainė tvarkosi su pagrindais.

Atlikti nemokamą patikrą