Estä Cross-Site Scripting (XSS) Spring Bootissa Content-Security Policies (CSP:t) avulla

esittely

Käyttäjien ja heidän henkilötietojensa turvallisuus verkkosovellusta käytettäessä on ensiarvoisen tärkeää. Vaikka tämä ohjaava periaate on tunnustettu jo verkkokehityksen alkuvaiheessa, huonot toimijat löytävät porsaanreikiä sovelluksissa ja voivat hyödyntää käyttäjiäsi.

Monet "tavalliset" hyökkäykset ovat hyvin tunnettuja ja dokumentoituja, eikä niiltä suojautuminen ole vaikeaa. Spring Bootin kaltaiset kehykset ovat poistaneet erilaisia ​​suojaustoimenpiteitä ja antavat sinun käyttää sovelluksissasi vain suojaussuodattimia tunnettujen hyökkäysten estämiseksi.

Tässä lyhyessä oppaassa tarkastellaan, mitä Cross-Site Scripting (XSS) on, kuinka joku voi suorittaa tämän hyökkäyksen omalle sovelluksellesi ja kuinka voit estää sen helposti Spring Bootin avulla.

Mitä on Cross-Site Scripting (XSS)?

Cross-Site Scripting on hyvin tunnettu, laajalle levinnyt hyväksikäyttö, jossa huono näyttelijä lisää käsikirjoituksen verkkosovellukseen.

Tyypillisesti verkkosovelluksiin sovelletaan saman alkuperän käytäntöä, joka rajoittaa verkkosivun komentosarjoja pääsemästä tietoihin lähteistä, jos niiden alkuperä ei täsmää. Saman alkuperäkäytännön mukaisesti – jos sivu osoitteesta a luotettava sivusto voivat päästä käsiksi käyttäjän kanssa koskeviin tietoihin (kuten evästeisiin), muut saman alkuperän sivut voivat myös tehdä niin. Tämä pääsynvalvontamuoto vaikutti riittävältä suojaamaan verkkosovellusten tietojen eheyttä tuolloin.

Cross-Site Scripting kiertää samaa alkuperää koskevan käytännön, lisäämällä haitallisen komentosarjan luotettavan verkkosivuston sivulle. Koska komentosarja ajetaan luotetulta verkkosivustolta, se suoritetaan luotettuna komentosarjana. Ei ollut selvää tapaa erottaa haitalliset skriptit ei-haitallisista komentosarjoista – joten mielivaltainen koodin suorittaminen oli mahdollista Cross-Site Scriptingillä. Tämä vaihtelee ärsyttävien hälytysten lisäämisestä manipulointihyökkäyksiin, käyttäjätietojen hiljaiseen keräämiseen tai käyttäjien uudelleenohjaamiseen tietojenkalastelusivuille, jotka näyttävät olevan osa luotettavia verkkosivustoja.

Paljon sivustot ovat alttiita Cross-Site Scripting -hyökkäyksille, ja se on edelleen yleinen hyökkäys, vaikka tämäntyyppinen hyväksikäyttö on ollut tunnettua 90-luvulta lähtien.

XSS:n estäminen Spring Boot -sovelluksessa sisällön suojauskäytännön (CSP) avulla

Spring Boot suhtautuu tietoturvaan vakavasti, ja Springin suojausmoduuli toteuttaa joustavia ja tehokkaita tietoturvakäytäntöjä, joiden avulla kehittäjät voivat minimoida turvallisuuteen liittyvät huolensa, mikä usein vaatii matalan tason ymmärrystä siitä, miten viestejä vaihdetaan verkossa. sovellus.

Oletuksena Spring Boot toteuttaa useita suojausotsikoita:

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-suojaus sisältyy oletusarvoisesti! Tämä suojausotsikko yrittää havaita XSS yrittää ja estää ne. Tämä ei kuitenkaan ole vikasietoinen prosessi, ja selaimissa on erilaisia ​​ilmaisimia. Joillakin selaimilla, kuten Chromella, on jopa poisti heidän XSS Auditorinsa. Lisäksi automaattinen tunnistus toimii Heijastuneet XSS-hyökkäykset, vaikka muitakin hyökkäyksiä on olemassa.

Nykyaikaisempi vaihtoehto X-XSS-Protectionille on Sisältö-turvallisuuspolitiikka (CSP), jotka käsittelevät ensisijaisesti käytäntöjä, joiden perusteella resursseja voidaan ladata, mistä lähteistä ja missä päätepisteissä. Vuodesta 2022 lähtien CSP on paras ehkäisykeino XSS-, Clickjacking- ja muuntyyppisiä hyökkäyksiä vastaan. Kaikki selaimet eivät käytä CSP:tä, minkä vuoksi sitä ei ole oletuksena sisällytetty suojausotsikoihin.

Huomautus: Vaikka CSP on käytössä, se on aina paras tapa vahvistaa Kaikki käyttäjän syötettä ja varmista, että se on turvallista käsitellä järjestelmässäsi koodin lisäämisen estämiseksi.

Spring Bootissa – jos haluat määrittää mukautettuja verkkoturvatoimenpiteitä, laajennat yleensä WebSecurityConfigurerAdapter luokka ja ohita configure() menetelmä:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

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

Jos sisällön turvallisuuspolitiikkaa koskevat direktiivit (toimitetaan a ;-eroteltu merkkijono) riippuvat käyttötapauksestasi ja lähteistä, joihin haluat luottaa:

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

Verkkosovellus voi esimerkiksi luetella luotettavia verkkosivustoja, joista voidaan ladata komentosarjoja:

script-src https://trusted.com;

Tai voit jättää luottamatta mihin tahansa kolmannen osapuolen verkkosivustoon:

script-src self;

Samoin sovellus voi luottaa laajennuksiin:

object-src https://trusted.com

Voit toimittaa monenlaisia ​​direktiivejä, mukaan lukien:

  • default-src – Oletusvaraus
  • child-src – Kelvolliset verkkotyöntekijät
  • frame-src – Kelvolliset lähteet kohteelle s ja s
  • img-src – Kelvolliset lähteet kuville
  • media-src – Kelvolliset lähteet kohteelle , ja tunnisteet
  • script-src – Kelvolliset komentosarjalähteet (auttaa estämään XSS:n)
  • style-src – Kelvolliset lähteet kohteelle elementtejä
  • base-uri – Rajoittaa resursseja, joihin pääsee elementti
  • frame-ancestors – Voimassa olevat vanhemmat , , jne. elementtejä
  • ja niin edelleen

Tutustu käytännönläheiseen, käytännölliseen Gitin oppimisoppaaseemme, jossa on parhaat käytännöt, alan hyväksymät standardit ja mukana tuleva huijauslehti. Lopeta Git-komentojen googlailu ja oikeastaan oppia se!

Tässä on esimerkiksi turvallinen joukko käytäntöohjeita:

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;

Lisätään nämä Spring Boot -sovellukseemme:

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

Voit käyttää CSP-arvioija arvioidaksesi, ovatko CSP-direktiivisi päteviä ja turvallisia, ja se osoittaa, mitkä direktiivit ovat helposti hyödynnettävissä. Tässä on CSP-direktiivi, joka sallii Google-sovellusliittymiä:

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'

Yhteenveto

Tässä lyhyessä oppaassa olemme tutustuneet siihen, mitä Cross-Site Scripting (XSS) on ja miten se toimii hollistisella tasolla. Tämän jälkeen olemme tutkineet joitain XSS-estotoimenpiteitä, jotka voidaan helposti ottaa käyttöön Spring Bootin avulla, jotta sovelluksesi olisivat turvallisia, ja asettanut Sisältö-turvallisuuspolitiikka (CSP).

Lopuksi olemme tutkineet CSP-direktiivejä ja tutustuneet muutamaan eri turvakäytäntöön.

Aikaleima:

Lisää aiheesta Stackabus