Põhjalik juhend Sisuturbe Poliitika (CSP) ja teiste esikülje turvapäiste kohta, mis kaitsevad veebirakendusi rünnakute eest ja parandavad kasutajate turvalisust.
Esikülje Turvapäised: Sisuturbe Poliitika (CSP) Meistriklass
Tänapäeva digitaalses maastikus, kus veebirakendused on üha keerukamad ja omavahel seotud, on turvaohtude eest kaitsmine esmatähtis. Kuigi tagakülje turvalisusele pööratakse sageli suurt tähelepanu, on esikülje turvalisus sama oluline. Esikülje turvapäised on esimene kaitseliin, pakkudes mehhanismi, mis annab brauserile juhiseid, kuidas käituda ja kaitsta kasutajaid erinevate rünnakute eest. Nende päiste seas paistab Sisuturbe Poliitika (CSP) silma kui võimas tööriist paljude riskide leevendamiseks.
Mis on Esikülje Turvapäised?
Esikülje turvapäised on HTTP vastusepäised, mille veebiserver saadab brauserile. Need päised sisaldavad juhiseid, kuidas brauser peaks vastuvõetud sisu käsitlema. Need aitavad vältida levinud rünnakuid, nagu näiteks:
- Saidiülene Skriptimine (XSS): Pahatahtlike skriptide süstimine usaldusväärsetesse veebisaitidesse.
- Klikipeibutus (Clickjacking): Kasutajate petmine klikkima millelegi muule, kui nad arvavad.
- VahendajarĂĽnnakud (Man-in-the-Middle Attacks): Kasutaja ja serveri vahelise suhtluse pealtkuulamine.
Mõned kõige olulisemad esikülje turvapäised on:
- Sisuturbe Poliitika (CSP): Määratleb allikad, kust brauseril on lubatud ressursse laadida.
- Strict-Transport-Security (HSTS): Sunnib brauserit kasutama HTTPS-i kogu veebisaidiga suhtlemisel.
- X-Frame-Options: Takistab veebisaidi manustamist iframe'i, leevendades klikipeibutusrĂĽnnakuid.
- X-XSS-Protection: Lülitab sisse brauseri sisseehitatud XSS-filtri. (Märkus: sageli asendatud CSP-ga, kuid võib siiski pakkuda täiendavat kaitsekihti).
- Referrer-Policy: Kontrollib päringutega saadetava viitaja (referrer) teabe hulka.
- Feature-Policy (nüüd Permissions-Policy): Võimaldab arendajatel valikuliselt lubada ja keelata brauseri funktsioone ja API-sid.
SĂĽgavuti Sisuturbe Poliitikasse (CSP)
Sisuturbe Poliitika (CSP) on HTTP vastusepäis, mis kontrollib, milliseid ressursse kasutajaagent võib antud lehel laadida. Sisuliselt loob see heakskiidetud sisu allikate valge nimekirja, vähendades oluliselt XSS-rünnakute riski. Määratledes selgesõnaliselt, millistest allikatest võib laadida ressursse nagu skripte, stiililehti, pilte ja fonte, muudab CSP ründajatel pahatahtliku koodi veebisaidile süstimise palju raskemaks.
Kuidas CSP töötab
CSP töötab, pakkudes brauserile nimekirja heakskiidetud allikatest erinevat tüüpi sisu jaoks. Kui brauser kohtab ressurssi, mis rikub CSP-d, blokeerib ta ressursi ja teatab rikkumisest. See blokeerimismehhanism takistab pahatahtliku koodi käivitamist, isegi kui ründajal õnnestub see HTML-i süstida.
CSP Direktiivid
CSP direktiivid on CSP poliitika põhikomponendid. Nad määravad lubatud allikad erinevat tüüpi ressurssidele. Mõned kõige sagedamini kasutatavad direktiivid on:
- default-src: Määrab vaikeallika kõikidele ressursitüüpidele. See on tagavaradirektiiv, mis rakendub, kui teisi, spetsiifilisemaid direktiive pole määratletud.
- script-src: Määrab lubatud allikad JavaScripti jaoks.
- style-src: Määrab lubatud allikad CSS-stiililehtede jaoks.
- img-src: Määrab lubatud allikad piltide jaoks.
- font-src: Määrab lubatud allikad fontide jaoks.
- media-src: Määrab lubatud allikad heli ja video jaoks.
- object-src: Määrab lubatud allikad pistikprogrammidele nagu Flash. (Üldiselt on parem vältida pistikprogrammide lubamist, kui võimalik).
- frame-src: Määrab lubatud allikad raamidele (iframe'id).
- connect-src: Määrab lubatud allikad võrgupäringutele (AJAX, WebSockets).
- base-uri: Piirab URL-e, mida saab kasutada
<base>elemendis. - form-action: Piirab URL-e, kuhu vorme saab esitada.
- frame-ancestors: Määrab kehtivad vanemad, mis võivad lehte manustada, kasutades
<frame>,<iframe>,<object>,<embed>või<applet>. See direktiiv pakub kaitset klikipeibutuse vastu. - upgrade-insecure-requests: Annab kasutajaagentidele korralduse käsitleda kõiki saidi ebaturvalisi URL-e (laaditud üle HTTP) nii, nagu oleksid need asendatud turvaliste URL-idega (laaditud üle HTTPS-i). See direktiiv on mõeldud veebisaitidele, mis on HTTP-lt HTTPS-ile ülemineku protsessis.
- report-uri: Määrab URL-i, kuhu brauser peaks saatma aruandeid CSP rikkumiste kohta. Aegunud ja asendatud `report-to`-ga.
- report-to: Määrab grupi nime, mis on defineeritud `Report-To` päises. See võimaldab peenemat kontrolli raporteerimise üle, sealhulgas mitme raporteerimispunkti määramist.
CSP Allika Väärtused
Allika väärtused määratlevad päritolud, kust ressursse on lubatud laadida. Mõned levinud allika väärtused on:
- *: Lubab sisu mis tahes allikast (Vältige selle kasutamist tootmiskeskkonnas!).
- 'self': Lubab sisu samast päritolust (skeem, host ja port) kui kaitstud dokument.
- 'none': Keelab sisu mis tahes allikast.
- 'unsafe-inline': Lubab kasutada inline JavaScripti ja CSS-i (Vältige selle kasutamist tootmiskeskkonnas!).
- 'unsafe-eval': Lubab kasutada dĂĽnaamilist koodi hindamist (nt
eval(),Function()) (Vältige selle kasutamist tootmiskeskkonnas!). - 'strict-dynamic': Määrab, et usaldus, mis on selgesõnaliselt antud märgistuses olevale skriptile nonce'i või räsiga, kandub edasi kõikidele skriptidele, mille see eellane laadib.
- 'unsafe-hashes': Lubab spetsiifilisi inline sündmuste käsitlejaid. See on üldiselt ebasoovitav selle keerukuse ja piiratud kasu tõttu.
- data:: Lubab laadida ressursse andme-URL-idest (nt manustatud pildid). Kasutage ettevaatlikult.
- mediastream:: Lubab kasutada `mediastream:` URI-sid meediaallikana.
- blob:: Lubab kasutada `blob:` URI-sid meediaallikana.
- filesystem:: Lubab laadida ressursse failisĂĽsteemist.
- https://example.com: Lubab sisu kindlast domeenist ja pordist.
- *.example.com: Lubab sisu mis tahes example.com alamdomeenist.
- nonce-{random-value}: Lubab skripte või stiile, millel on vastav nonce-atribuut. See nõuab serveripoolset juhusliku nonce-väärtuse genereerimist iga päringu jaoks.
- sha256-{hash-value}: Lubab skripte või stiile, millel on vastav SHA256, SHA384 või SHA512 räsi.
CSP Režiimid: Jõustamine vs. Ainult Raporteerimine
CSP-d saab rakendada kahes reĹľiimis:
- Jõustamisrežiim (Enforce Mode): Selles režiimis blokeerib brauser kõik ressursid, mis rikuvad CSP-d. See on soovitatav režiim tootmiskeskkondade jaoks. CSP saadetakse `Content-Security-Policy` päisega.
- Ainult Raporteerimisrežiim (Report-Only Mode): Selles režiimis raporteerib brauser CSP rikkumistest, kuid ei blokeeri ressursse. See on kasulik CSP testimiseks ja hindamiseks enne selle jõustamist. CSP saadetakse `Content-Security-Policy-Report-Only` päisega.
CSP Rakendamine: Samm-sammuline Juhend
CSP rakendamine võib tunduda hirmutav, kuid struktureeritud lähenemisviisi abil saate oma veebirakendust tõhusalt turvata.
1. Alustage Ainult RaporteerimisreĹľiimi Poliitikaga
Alustage CSP rakendamist ainult raporteerimisrežiimis. See võimaldab teil jälgida rikkumisi ilma veebisaidi funktsionaalsust häirimata. Konfigureerige report-uri või report-to direktiiv, et saata rikkumisaruanded määratud lõpp-punkti.
Näidispäis (Ainult Raporteerimine):
Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report
2. AnalĂĽĂĽsige Rikkumisaruandeid
Analüüsige hoolikalt rikkumisaruandeid, et tuvastada, milliseid ressursse blokeeritakse ja miks. See aitab teil mõista oma veebisaidi ressursside sõltuvusi ja tuvastada potentsiaalseid turvaauke.
Rikkumisaruanded saadetakse tavaliselt JSON-vormingus konfigureeritud report-uri või report-to lõpp-punkti. Need aruanded sisaldavad teavet rikkumise kohta, näiteks blokeeritud URI, rikutud direktiiv ja dokumendi URI.
3. Viimistlege CSP Poliitikat
Rikkumisaruannete põhjal viimistlege oma CSP poliitikat, et lubada legitiimseid ressursse, säilitades samal ajal tugeva turvalisuse taseme. Lisage spetsiifilised allikaväärtused ressurssidele, mida blokeeritakse. Kaaluge nonce'ide või räside kasutamist inline-skriptide ja -stiilide jaoks, et vältida 'unsafe-inline' kasutamist.
4. Minge üle Jõustamisrežiimile
Kui olete kindel, et teie CSP poliitika ei blokeeri legitiimseid ressursse, minge üle jõustamisrežiimile. See blokeerib kõik ülejäänud rikkumised ja pakub tugeva kaitsekihi XSS-rünnakute vastu.
Näidispäis (Jõustamine):
Content-Security-Policy: default-src 'self'; script-src 'self' https://example.com; style-src 'self' 'unsafe-inline'; img-src 'self' data:; report-uri /csp-report
5. Jälgige ja Hooldage CSP Poliitikat
CSP ei ole „seadista ja unusta“ lahendus. On oluline pidevalt jälgida oma CSP poliitikat ja värskendada seda vastavalt veebisaidi arengule ja uute turvaohtude tekkimisele. Vaadake regulaarselt üle rikkumisaruanded ja kohandage poliitikat vastavalt vajadusele.
Praktilised CSP Näited
Vaatame mõningaid praktilisi CSP näiteid erinevate stsenaariumide jaoks:
Näide 1: Põhiline CSP Lihtsa Veebisaidi jaoks
See CSP lubab sisu samast päritolust ja pilte mis tahes allikast.
Content-Security-Policy: default-src 'self'; img-src *
Näide 2: CSP Spetsiifiliste Skripti- ja Stiiliallikatega
See CSP lubab skripte samast päritolust ja konkreetsest CDN-ist ning stiile samast päritolust ja inline-stiile.
Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com; style-src 'self' 'unsafe-inline'
Näide 3: CSP Nonce'idega Inline-skriptide jaoks
See CSP nõuab iga inline-skripti jaoks unikaalset nonce'i.
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-r4nd0mn0nc3'
HTML:
<script nonce="r4nd0mn0nc3">console.log('Hello, world!');</script>
Tähtis: Nonce väärtus tuleb dünaamiliselt genereerida serveris iga päringu jaoks. See takistab ründajatel nonce'i taaskasutamist.
Näide 4: CSP, mis piirab Raami Eellasi klikipeibutuse vältimiseks
See CSP takistab lehe manustamist iframe'i mis tahes domeenil, välja arvatud `https://example.com`.
Content-Security-Policy: frame-ancestors 'self' https://example.com
Näide 5: Rangem CSP, mis kasutab 'strict-dynamic' ja tagavarana 'self'
See CSP kasutab `strict-dynamic` moodsate brauserite jaoks, toetades samal ajal vanemaid brausereid, mis seda ei toeta. See sisaldab ka `report-uri` rikkumiste jälgimiseks.
Content-Security-Policy: default-src 'self'; script-src 'strict-dynamic' 'nonce-{random-nonce}' 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; report-uri /csp-report
Ärge unustage asendada `{random-nonce}` dünaamiliselt genereeritud nonce väärtusega serveri poolel.
CSP ja Ăśhelehelised Rakendused (SPA-d)
CSP rakendamine SPA-des võib olla keeruline nende rakenduste dünaamilise olemuse tõttu. SPA-d tuginevad sageli tugevalt JavaScriptile DOM-i genereerimiseks ja manipuleerimiseks, mis võib hoolika käsitlemiseta põhjustada CSP rikkumisi.
Siin on mõned näpunäited CSP rakendamiseks SPA-des:
- Vältige
'unsafe-inline'ja'unsafe-eval': Neid direktiive tuleks SPA-des võimaluse korral vältida. Nad nõrgestavad oluliselt teie rakenduse turvalisust. - Kasutage Nonce'e või Räsisid: Kasutage nonce'e või räsisid inline-skriptide ja -stiilide jaoks. See on soovitatav lähenemisviis SPA-de jaoks.
- Kaaluge Usaldusväärseid Tüüpe (Trusted Types): Trusted Types on brauseri API, mis aitab vältida DOM-põhiseid XSS-haavatavusi. Seda saab kasutada koos CSP-ga turvalisuse edasiseks parandamiseks.
- Kasutage CSP-ga ühilduvat raamistikku: Mõned esikülje raamistikud (nagu React teatud konfiguratsioonidega, Angular ja Vue.js) pakuvad funktsioone, mis aitavad teil CSP-d lihtsamalt rakendada.
Teised Olulised Esikülje Turvapäised
Kuigi CSP on esikülje turvalisuse nurgakivi, mängivad teised päised olulist rolli tervikliku kaitse strateegia pakkumisel:
Strict-Transport-Security (HSTS)
Strict-Transport-Security (HSTS) päis annab brauserile korralduse kasutada veebisaidiga ühenduse loomiseks alati HTTPS-i. See hoiab ära vahendajarünnakud, mis üritavad ühendust alandada HTTP-le.
Näidispäis:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
max-age: Määrab aja (sekundites), mille jooksul brauser peaks meeles pidama saidile juurdepääsu ainult HTTPS-i kaudu. Väärtus 31536000 sekundit (1 aasta) on soovitatav tootmiskeskkondade jaoks.includeSubDomains: Näitab, et HSTS-poliitika kehtib kõigile domeeni alamdomeenidele.preload: Võimaldab domeeni lisada HSTS-toega domeenide nimekirja, mis on brauseritesse eellaaditud. See nõuab oma domeeni esitamist Google'i hallatavasse HSTS-i eellaadimise nimekirja.
X-Frame-Options
X-Frame-Options päis hoiab ära klikipeibutusrünnakuid, kontrollides, kas veebisaiti saab manustada iframe'i.
Näidispäis:
X-Frame-Options: DENY
Võimalikud väärtused:
DENY: Takistab lehe kuvamist iframe'is, olenemata päritolust.SAMEORIGIN: Lubab lehe kuvamist iframe'is ainult siis, kui iframe'i päritolu vastab lehe päritolule.ALLOW-FROM uri: Lubab lehe kuvamist iframe'is ainult siis, kui iframe'i päritolu vastab määratud URI-le. Märkus: See valik on aegunud ja kõik brauserid ei pruugi seda toetada.
Märkus: frame-ancestors direktiiv CSP-s pakub paindlikumat ja võimsamat viisi raamimise kontrollimiseks ning on üldiselt eelistatum kui X-Frame-Options.
X-XSS-Protection
X-XSS-Protection päis lülitab sisse brauseri sisseehitatud XSS-filtri. Kuigi CSP on robustsem lahendus XSS-rünnakute ennetamiseks, võib see päis pakkuda täiendavat kaitsekihti, eriti vanematele brauseritele, mis ei pruugi CSP-d täielikult toetada.
Näidispäis:
X-XSS-Protection: 1; mode=block
1: Lülitab XSS-filtri sisse.0: Lülitab XSS-filtri välja.mode=block: Annab brauserile korralduse leht blokeerida, kui tuvastatakse XSS-rünnak.report=uri: Määrab URL-i, kuhu brauser peaks saatma aruande, kui tuvastatakse XSS-rünnak.
Referrer-Policy
Referrer-Policy päis kontrollib, kui palju viitaja (referrer) teavet päringutega saadetakse. Viitaja teavet saab kasutada kasutajate jälgimiseks veebisaitide vahel, seega selle kontrollimine võib parandada kasutajate privaatsust.
Näidispäis:
Referrer-Policy: strict-origin-when-cross-origin
Mõned levinud väärtused:
no-referrer: Ära kunagi saada Referer-päist.no-referrer-when-downgrade: Ära saada Referer-päist päritoludele ilma TLS-ita (HTTPS).origin: Saada Referer-päises ainult päritolu (skeem, host ja port).origin-when-cross-origin: Saada päritolu päritoluüleste päringute jaoks ja täielik URL samast päritolust päringute jaoks.same-origin: Saada Referer-päis samast päritolust päringute jaoks, kuid mitte päritoluüleste päringute jaoks.strict-origin: Saada ainult päritolu, kui protokolli turvalisuse tase jääb samaks (HTTPS-ist HTTPS-i), kuid ära saada päist vähem turvalisse sihtkohta (HTTPS-ist HTTP-sse).strict-origin-when-cross-origin: Saada päritolu samast päritolust päringu tegemisel. Päritoluüleste päringute puhul saada päritolu ainult siis, kui protokolli turvalisuse tase jääb samaks (HTTPS-ist HTTPS-i), kuid ära saada päist vähem turvalisse sihtkohta (HTTPS-ist HTTP-sse).unsafe-url: Saada täielik URL Referer-päises, olenemata päritolust. Kasutage äärmise ettevaatusega, kuna see võib paljastada tundlikku teavet.
Permissions-Policy (endine Feature-Policy)
Permissions-Policy päis (endise nimega Feature-Policy) võimaldab arendajatel valikuliselt lubada ja keelata brauseri funktsioone ja API-sid. See aitab vähendada teie rakenduse rünnakupinda ja parandada kasutajate privaatsust.
Näidispäis:
Permissions-Policy: geolocation=()
See näide keelab geolokatsiooni API veebisaidi jaoks.
Teised funktsioonid, mida saab Permissions-Policy abil kontrollida, on:
cameramicrophonegeolocationaccelerometergyroscopemagnetometerusbmidipaymentfullscreen
Turvapäiste Seadistamine Erinevatel Platvormidel
Turvapäiste seadistamise meetod sõltub kasutatavast veebiserverist või platvormist. Siin on mõned levinud näited:
Apache
Apache'is saate turvapäiseid seadistada, lisades need .htaccess faili või serveri konfiguratsioonifaili (httpd.conf).
Näide .htaccess konfiguratsioonist:
<IfModule mod_headers.c>
Header set Content-Security-Policy "default-src 'self'; script-src 'self' https://cdn.example.com; style-src 'self' 'unsafe-inline'; img-src 'self' data:; report-uri /csp-report"
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header set X-Frame-Options "DENY"
Header set X-XSS-Protection "1; mode=block"
Header set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>
Nginx
Nginxis saate turvapäiseid seadistada, lisades need serveri plokki Nginxi konfiguratsioonifailis (nginx.conf).
Näide Nginxi konfiguratsioonist:
server {
listen 443 ssl;
server_name example.com;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://cdn.example.com; style-src 'self' 'unsafe-inline'; img-src 'self' data:; report-uri /csp-report";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
add_header X-Frame-Options "DENY";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "strict-origin-when-cross-origin";
...
}
Node.js (Express)
Node.js-is saate turvapäiseid seadistada vahevara nagu Helmet abil.
Näide Helmeti kasutamisest:
const express = require('express');
const helmet = require('helmet');
const app = express();
app.use(helmet());
// Kohandage CSP-d vajadusel
app.use(helmet.contentSecurityPolicy({
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'", "https://cdn.example.com"],
styleSrc: ["'self'", "'unsafe-inline'"],
imgSrc: ["'self'", "data:"],
reportUri: '/csp-report'
},
}));
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
Cloudflare
Cloudflare võimaldab teil turvapäiseid seadistada nende Page Rules või Transform Rules abil.
Turvapäiste Testimine
Pärast turvapäiste rakendamist on oluline neid testida, et veenduda nende korrektses toimimises. Mitmed veebipõhised tööriistad aitavad teil analüüsida oma veebisaidi turvapäiseid:
- SecurityHeaders.com: Lihtne ja tõhus tööriist turvapäiste analüüsimiseks.
- Mozilla Observatory: Põhjalik tööriist veebisaidi turvalisuse testimiseks, sealhulgas turvapäiste testimiseks.
- WebPageTest.org: Võimaldab vaadata HTTP-päiseid astmelises diagrammis (waterfall chart).
Kokkuvõte
Esikülje turvapäised, eriti Sisuturbe Poliitika (CSP), on hädavajalikud veebirakenduste kaitsmiseks erinevate rünnakute eest ja kasutajate turvalisuse parandamiseks. Nende päiste hoolika rakendamise ja hooldamisega saate oluliselt vähendada XSS-i, klikipeibutuse ja muude turvaaukude riski. Ärge unustage alustada ainult raporteerimisrežiimi poliitikaga, analüüsida rikkumisaruandeid, viimistleda poliitikat ja seejärel minna üle jõustamisrežiimile. Jälgige ja värskendage regulaarselt oma turvapäiseid, et hoida oma veebisait turvalisena, kui see areneb ja tekivad uued ohud.
Võttes kasutusele ennetava lähenemisviisi esikülje turvalisusele, saate luua turvalisemaid ja usaldusväärsemaid veebirakendusi, mis kaitsevad teie kasutajaid ja teie äri.