Saidiülese skriptimise (XSS) vältimine Spring Bootis sisuturbepoliitikaga (CSP)

Sissejuhatus

Kasutajate ja nende isikuandmete turvalisus veebirakenduse kasutamisel on esmatähtis. Kuigi seda juhtpõhimõtet on tunnustatud juba veebiarenduse algusjärgus, leiavad halvad tegijad rakendustes lünki ja võivad teie kasutajaid ära kasutada.

Paljud "standardsed" rünnakud on hästi teada ja dokumenteeritud ning nende eest kaitsmine pole keeruline. Et vabastada arendaja ise turbepraktikate rakendamisest, on sellised raamistikud nagu Spring Boot eemaldanud erinevad turvameetmed ja võimaldavad teil lihtsalt rakendada oma rakendustes turvafiltreid, et vältida tuntud rünnakuid.

Selles lühikeses juhendis vaatleme, mis on saidiülene skriptimine (XSS), kuidas keegi saaks selle rünnaku teie enda rakendusele sooritada ja kuidas saate seda Spring Booti abil hõlpsalt ära hoida.

Mis on saidiülene skriptimine (XSS)?

Saididevaheline skriptimine on tuntud ja laialt levinud ärakasutamine, mille käigus halb näitleja sisestab skripti veebirakendusse.

Tavaliselt rakendatakse veebirakendustele sama päritolu poliitikat, mis piirab veebilehel olevate skriptide juurdepääsu allikatest pärit andmetele, kui nende päritolu ei ühti. Sama päritolu poliitika alusel – kui lehekülg a usaldusväärne veebisait võivad pääseda juurde kasutajaga liidestavatele andmetele (näiteks küpsistele), seda võivad teha ka teised sama päritoluga lehed. See juurdepääsukontrolli vorm tundus tol ajal piisav, et kaitsta veebirakendustes olevate andmete terviklikkust.

Saididevaheline skriptimine hoiab kõrvale sama päritolu poliitikast, sisestades usaldusväärse veebisaidi lehele pahatahtliku skripti. Kuna skripti käitatakse usaldusväärselt veebisaidilt, käivitatakse see usaldusväärse skriptina. Pahatahtlike skriptide ja mittepahatahtlike skriptide eristamiseks polnud selget viisi – seega oli saidiülese skriptimise abil võimalik suvaline koodikäivitus. See ulatub tüütute hoiatuste sisestamisest, sotsiaalse manipuleerimise rünnakuteni, kasutajateabe vaikselt kogumiseni või kasutajate ümbersuunamisest andmepüügilehtedele, mis näivad olevat usaldusväärsete veebisaitide osad.

Palju veebisaidid on vastuvõtlikud saidiülese skriptimise rünnakutele ja see on tänapäeval endiselt tavaline rünnak, kuigi seda tüüpi ärakasutamine on tuntud juba 90ndatest.

XSS-i vältimine kevadkäivitusrakenduses sisuturbepoliitikaga (CSP)

Spring Boot võtab turvalisust tõsiselt ning Springi turvamoodul rakendab paindlikke ja võimsaid turbepraktikaid, mis võimaldavad arendajatel vähendada oma muret turvalisuse pärast, mis sageli nõuab madalal tasemel arusaamist veebis sõnumite vahetamise põhimõtetest. rakendus.

Vaikimisi rakendab Spring Boot mitut turvapäist:

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

X-XSS-kaitse on vaikimisi kaasas! See turvapäis püüab avastama XSS proovib ja blokeerib need. See ei ole siiski tõrkekindel protsess ja brauserites on detektorite rakendusi erinevad. Mõnedel brauseritel, näiteks Chrome'il, on isegi eemaldas oma XSS Auditori. Lisaks töötab automaatne tuvastamine Peegeldunud XSS-i rünnakud, samas on olemas ka muud tüüpi rünnakud.

Moodsam alternatiiv X-XSS-Protectionile on Sisu-turvapoliitika (CSP), mis tegelevad peamiselt poliitikatega, mille alusel saab ressursse laadida, millisest lähtepunktist ja millistes lõpp-punktides. Alates 2022. aastast on CSP parim ennetusmeede XSS-i, Clickjackingi ja muud tüüpi rünnakute vastu. Mitte kõik brauserid ei rakenda CSP-d, mistõttu ei sisaldu see vaikimisi turbepäistes.

Märge: Isegi kui CSP on paigas, on see alati parim toimimisviis kinnitamiseks mistahes kasutaja sisend ja veenduge, et koodi sisestamise vältimiseks on teie süsteemiga töötlemine ohutu.

Spring Bootis – kohandatud veebiturvameetmete konfigureerimiseks pikendate tavaliselt WebSecurityConfigurerAdapter klassi ja alistada configure() meetod:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
	http
	.headers()
		.contentSecurityPolicy("csp-directives");
    }
}

Kui sisu turbepoliitika direktiivid (esitatakse a ;-eraldatud string) sõltuvad teie kasutusjuhtumist ja sellest, milliseid allikaid soovite usaldada:

Content-Security Policy: directive1; directive2; directive3; ... directiveN;

Näiteks võib veebirakendus loetleda usaldusväärsed veebisaidid, millelt saab skripte laadida:

script-src https://trusted.com;

Või võite jätta usaldamata mis tahes kolmanda osapoole veebisaidi:

script-src self;

Samamoodi võib rakendus usaldada pistikprogramme:

object-src https://trusted.com

Saate pakkuda palju erinevaid direktiive, sealhulgas:

  • default-src – Vaikimisi varu
  • child-src – Kehtivad veebitöötajate allikad
  • frame-src – kehtivad allikad s ja s
  • img-src – Piltide jaoks sobivad allikad
  • media-src – kehtivad allikad , ja silte
  • script-src - Kehtivad skriptiallikad (aitab vältida XSS-i)
  • style-src – kehtivad allikad elemendid
  • base-uri – Piirab ressursse, millele pääseb juurde aadressilt element
  • frame-ancestors – Kehtivad vanemad , , jne elemendid
  • ja nii edasi

Tutvuge meie praktilise ja praktilise Giti õppimise juhendiga, mis sisaldab parimaid tavasid, tööstusharus aktsepteeritud standardeid ja kaasas olevat petulehte. Lõpetage Giti käskude guugeldamine ja tegelikult õppima seda!

Näiteks siin on turvaline poliitikajuhiste komplekt:

script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:;
object-src 'none';
base-uri 'none';
require-trusted-types-for 'script';
report-uri https://csp.example.com;

Lisame need oma Spring Booti rakendusse:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
	http
	.headers()
		.contentSecurityPolicy("script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:; object-src 'none'; base-uri 'none'; require-trusted-types-for 'script'; report-uri https://csp.example.com;");
    }
}

Võite kasutada CSP-hindaja et hinnata, kas teie CSP direktiivid kehtivad ja ohutu ja juhib tähelepanu, millised direktiivid on kergesti kasutatavad. Siin on CSP-direktiiv, mis lubab Google'i API-sid:

default-src 'self';
object-src 'none';
frame-src 'self' data:; 
script-src 'self' 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' https://storage.googleapis.com; 
style-src 'self' 'unsafe-inline'; 
img-src 'self' data:; 
font-src 'self' data:;
base-uri 'self'

Järeldus

Selles lühikeses juhendis oleme heitnud pilgu sellele, mis on saidiülene skriptimine (XSS) ja kuidas see hollistilisel tasemel töötab. Seejärel oleme uurinud mõningaid XSS-i ennetusmeetmeid, mida saab Spring Bootiga hõlpsasti rakendada, et muuta teie rakendused turvaliseks, ja seadnud Sisu-turvapoliitika (CSP).

Lõpuks oleme uurinud CSP direktiive ja heitnud pilgu paarile erinevale ohutuspoliitikale.

Ajatempel:

Veel alates Stackabus