Preprečite skriptiranje med spletnimi mesti (XSS) pri spomladanskem zagonu s pravilniki o varnosti vsebine (CSP)

Predstavitev

Varnost uporabnikov in njihovih osebnih podatkov pri uporabi spletne aplikacije je najpomembnejša. Čeprav je bilo to vodilno načelo priznano že v zgodnjih fazah spletnega razvoja – slabi akterji najdejo vrzeli v aplikacijah in lahko izkoriščajo vaše uporabnike.

Mnogi »standardni« napadi so znani in dokumentirani, zaščita pred njimi pa ni težka. Da bi razvijalca razbremenili samega izvajanja varnostnih praks, so ogrodja, kot je Spring Boot, opustila različne varnostne ukrepe in vam omogočajo, da preprosto uporabite varnostne filtre v svojih aplikacijah, da preprečite dobro znane napade.

V tem kratkem vodniku si bomo ogledali, kaj je skriptno izvajanje med spletnimi mesti (XSS), kako lahko nekdo izvede ta napad na vašo aplikacijo in kako ga lahko preprosto preprečite s programom Spring Boot.

Kaj je skriptiranje med spletnimi mesti (XSS)?

Skriptiranje med spletnimi mesti je dobro znano, zelo razširjeno izkoriščanje, pri katerem slab igralec vstavi skript v spletno aplikacijo.

Običajno se za spletne aplikacije uporablja pravilnik o istem izvoru, ki skriptom na spletni strani omejuje dostop do podatkov iz virov, če se njihov izvor ne ujema. V skladu s pravilnikom o istem izvoru – če stran iz a zaupanja vredno spletno mesto lahko dostopa do podatkov v vmesniku z uporabnikom (kot so na primer piškotki), to lahko storijo tudi druge strani iz istega izvora. Ta oblika nadzora dostopa se je takrat zdela zadostna za zaščito celovitosti podatkov v spletnih aplikacijah.

Skriptiranje med spletnimi mesti zaobide politiko istega izvora, z vstavljanjem zlonamernega skripta na stran zaupanja vrednega spletnega mesta. Ker se skript izvaja z zaupanja vrednega spletnega mesta, se izvaja kot zaupanja vreden skript. Ni bilo jasnega načina za razlikovanje med zlonamernimi in nezlonamernimi skripti – zato je bilo izvajanje poljubne kode možno s skriptiranjem med spletnimi mesti. To sega od vstavljanja nadležnih opozoril do napadov socialnega inženiringa, tihega zbiranja podatkov o uporabnikih ali preusmerjanja uporabnikov na strani z lažnim predstavljanjem, ki so videti kot deli zaupanja vrednih spletnih mest.

Veliko spletna mesta so dovzetna za napade s skriptiranjem med spletnimi mesti in je še danes pogost napad, čeprav je ta vrsta izkoriščanja znana že od 90. let.

Preprečevanje XSS v spomladanski zagonski aplikaciji s pravilnikom o varnosti vsebine (CSP)

Spring Boot jemlje varnost resno, Springov varnostni modul pa izvaja prilagodljive in zmogljive varnostne prakse, ki razvijalcem omogočajo, da zmanjšajo svoje skrbi, ko gre za varnost, ki pogosto zahteva nizko raven razumevanja načel načina izmenjave sporočil v spletu. aplikacija.

Spring Boot privzeto izvaja več varnostnih glav:

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

Zaščita X-XSS je privzeto vključena! Ta varnostna glava poskuša odkrivanje XSS poskuša in jih blokira. Vendar to ni varen postopek in brskalniki imajo različne izvedbe detektorjev. Nekateri brskalniki, kot je Chrome, imajo celo odstranili svojega nadzornika XSS. Poleg tega deluje avtomatizirano zaznavanje Odraženi napadi XSS, obstajajo pa tudi druge vrste napadov.

Sodobnejša alternativa X-XSS-Protection je Politika varnosti vsebine (CSP), ki se v prvi vrsti ukvarjajo s politikami o tem, kateri viri se lahko naložijo, iz katerega izvora in na katerih končnih točkah. Od leta 2022 je CSP najboljši preventivni ukrep proti XSS, Clickjackingu in drugim vrstam napadov. Vsi brskalniki ne izvajajo CSP, zato ni privzeto vključen v varnostne glave.

Opomba: Tudi če je CSP vzpostavljen, je to vedno najboljši potek dejanja za preverjanje kaj uporabniški vnos in se prepričajte, da je obdelava z uporabo vašega sistema varna, da preprečite vstavljanje kode.

Pri spomladanskem zagonu – za konfiguracijo prilagojenih spletnih varnostnih ukrepov boste običajno razširili WebSecurityConfigurerAdapter razred in preglasi configure() metoda:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

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

Kjer so direktive politike varnosti vsebine (priložene kot a ;-ločen niz) je odvisno od vašega primera uporabe in virov, ki jim želite zaupati:

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

Spletna aplikacija lahko na primer navede zaupanja vredna spletna mesta, s katerih je mogoče naložiti skripte z:

script-src https://trusted.com;

Lahko pa preskočite zaupanje kateremu koli spletnemu mestu tretjih oseb:

script-src self;

Podobno lahko aplikacija zaupa vtičnikom:

object-src https://trusted.com

Obstaja veliko različnih direktiv, ki jih lahko posredujete, vključno z:

  • default-src – Privzeta nadomestna možnost
  • child-src – Veljavni viri spletnih delavcev
  • frame-src – Veljavni viri za e in s
  • img-src – Veljavni viri za slike
  • media-src – Veljavni viri za , in oznake
  • script-src – Veljavni viri skriptov (pomaga preprečiti XSS)
  • style-src – Veljavni viri za elementi
  • base-uri – Omejuje vire, dostopne iz element
  • frame-ancestors – Veljavni starši , , itd. elementi
  • in tako naprej

Oglejte si naš praktični, praktični vodnik za učenje Gita z najboljšimi praksami, standardi, sprejetimi v panogi, in priloženo goljufijo. Nehajte Googlati ukaze Git in pravzaprav naučiti it!

Tukaj je na primer varen nabor direktiv pravilnika:

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;

Dodajmo to v našo aplikacijo Spring Boot:

@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;");
    }
}

Lahko uporabite CSP-ocenjevalec da ocenite, ali so vaše direktive CSP veljavne in varen in pokazal bo, katere direktive je enostavno izkoristiti. Tukaj je direktiva CSP, ki dovoljuje Googlove API-je:

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'

zaključek

V tem kratkem vodniku smo si ogledali, kaj je skriptno izvajanje med spletnimi mesti (XSS) in kako deluje na celostni ravni. Nato smo raziskali nekaj preventivnih ukrepov XSS, ki jih je mogoče preprosto implementirati s Spring Bootom, da bodo vaše aplikacije varne, in nastavili Politika varnosti vsebine (CSP).

Nazadnje smo raziskali direktive CSP in si ogledali nekaj različnih varnostnih pravilnikov.

Časovni žig:

Več od Stackabuse