A Cross-Site Scripting (XSS) megakadályozása a tavaszi rendszerindításban tartalombiztonsági házirendekkel (CSP)

Bevezetés

A felhasználók és személyes adataik biztonsága a webalkalmazás használata során a legfontosabb. Bár ezt a vezérelvet már a webfejlesztés korai szakaszában is elismerték, a rossz szereplők kiskapukat találnak az alkalmazásokban, és kihasználhatják a felhasználókat.

Sok „szokásos” támadás jól ismert és dokumentált, és az ellenük való védelem nem nehéz. Annak érdekében, hogy mentesítse a fejlesztőt a biztonsági gyakorlatok megvalósításától, az olyan keretrendszerek, mint a Spring Boot, elvonatkoztattak különféle biztonsági intézkedéseket, és lehetővé teszik, hogy egyszerűen alkalmazzon biztonsági szűrőket az alkalmazásokban, hogy megakadályozza a jól ismert támadásokat.

Ebben a rövid útmutatóban megnézzük, mi az a Cross-Site Scripting (XSS), hogyan hajthatja végre valaki ezt a támadást a saját alkalmazásain, és hogyan akadályozhatja meg egyszerűen a Spring Boot segítségével.

Mi az a Cross-Site Scripting (XSS)?

A Cross-Site Scripting egy jól ismert, széles körben elterjedt kizsákmányolás, amelynek során egy rossz színész szkriptet szúr be egy webalkalmazásba.

Általában az azonos eredetű házirendet alkalmazzák a webalkalmazásokra, amely korlátozza a weboldalak szkriptjeit, hogy hozzáférjenek a forrásokból származó adatokhoz, ha azok eredete nem egyezik. Az azonos származású szabályzat szerint – ha egy oldal a megbízható weboldal hozzáférhetnek a felhasználóval érintkező adatokhoz (például cookie-khoz), más, azonos eredetű oldalak is megtehetik ezt. A hozzáférés-szabályozásnak ez a formája akkoriban elegendőnek tűnt a webalkalmazásokon található adatok sértetlenségének védelméhez.

A Cross-Site Scripting megkerüli az azonos eredetre vonatkozó szabályzatot, rosszindulatú szkript beszúrásával egy megbízható webhely oldalára. Mivel a szkript megbízható webhelyről fut, megbízható szkriptként fut le. Nem volt egyértelmű módja a rosszindulatú és a nem rosszindulatú szkriptek megkülönböztetésének – így tetszőleges kódfuttatás lehetséges volt a Cross-Site Scripting segítségével. Ez a zavaró riasztások beszúrásától a manipulációs támadásokig, a felhasználói adatok csendes gyűjtéséig vagy a felhasználók olyan adathalász oldalakra való átirányításáig terjed, amelyek úgy tűnik, hogy megbízható webhelyek részei.

Sok A webhelyek érzékenyek a Cross-Site Scripting támadásokra, és ez ma is gyakori támadás, bár ez a fajta kizsákmányolás a 90-es évek óta ismert.

Az XSS megelőzése egy tavaszi rendszerindítási alkalmazásban tartalombiztonsági házirend (CSP) segítségével

A Spring Boot komolyan veszi a biztonságot, a Spring Biztonsági modulja pedig rugalmas és hatékony biztonsági gyakorlatokat valósít meg, amelyek lehetővé teszik a fejlesztők számára, hogy minimalizálják a biztonsággal kapcsolatos aggodalmaikat, ami gyakran megköveteli az üzenetek webes cseréjének elveinek alacsony szintű megértését. Alkalmazás.

Alapértelmezés szerint a Spring Boot több biztonsági fejlécet valósít meg:

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

Az X-XSS-Protection alapértelmezés szerint benne van! Ez a biztonsági fejléc megpróbálja kimutatására Az XSS megkísérli, és blokkolja őket. Ez azonban nem hibabiztos folyamat, és a böngészőkben különböző érzékelők vannak. Egyes böngészőkben, például a Chrome-ban, még eltávolította az XSS Auditort. Ezen túlmenően, az automatizált észlelés működik Visszavert XSS-támadások, míg más típusú támadások is léteznek.

Az X-XSS-Protection modernebb alternatívája a Tartalom-biztonsági szabályzat (CSP), amelyek elsősorban azokkal a házirendekkel foglalkoznak, amelyek alapján az erőforrások betölthetők, melyik forrásból és mely végpontokon lehet. 2022-től a CSP a legjobb megelőző intézkedés az XSS, Clickjacking és más típusú támadások ellen. Nem minden böngésző valósítja meg a CSP-t, ezért alapértelmezés szerint nem szerepel a biztonsági fejlécekben.

Jegyzet: Még ha a CSP is működik, mindig ez a legjobb eljárás az érvényesítéshez bármilyen felhasználói bevitelt, és győződjön meg arról, hogy biztonságos-e a feldolgozás a rendszer használatával a kódbefecskendezés elkerülése érdekében.

A Spring Boot – egyéni webes biztonsági intézkedések konfigurálásához általában ki kell terjeszteni a WebSecurityConfigurerAdapter osztályt, és felülbírálja a configure() eljárás:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

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

Ahol a tartalombiztonsági irányelvek (amelyek a ;-elválasztott karakterlánc) függ a használati esettől és attól, hogy mely forrásokban szeretne megbízni:

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

Például egy webalkalmazás felsorolhatja azokat a megbízható webhelyeket, amelyekről szkriptek tölthetők be:

script-src https://trusted.com;

Vagy kihagyhatja a harmadik fél webhelyeinek megbízhatóságát:

script-src self;

Hasonlóképpen, egy alkalmazás megbízhat a bővítményekben:

object-src https://trusted.com

Az irányelvek széles választékát kínálja, többek között:

  • default-src – Alapértelmezett tartalék
  • child-src – Érvényes webmunkás-források
  • frame-src – Érvényes források ehhez s és s
  • img-src – Érvényes források a képekhez
  • media-src – Érvényes források ehhez , és a címkék
  • script-src – Érvényes szkriptforrások (segít megelőzni az XSS-t)
  • style-src – Érvényes források ehhez elemek
  • base-uri – Korlátozza a következőről elérhető erőforrásokat elem
  • frame-ancestors – Érvényes szülei , , stb. elemeket
  • elvisszük helyi falvakba ahol megismerkedhet az őslakosok kultúrájával; ...

Tekintse meg gyakorlatias, gyakorlati útmutatónkat a Git tanulásához, amely tartalmazza a bevált gyakorlatokat, az iparág által elfogadott szabványokat és a mellékelt csalólapot. Hagyd abba a guglizást a Git parancsokkal, és valójában tanulni meg!

Például itt van egy biztonságos házirend-irányelv:

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;

Adjuk hozzá ezeket a Spring Boot alkalmazásunkhoz:

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

Használhatja a CSP-értékelő annak értékeléséhez, hogy a CSP direktívái érvényesek-e és a biztonságos, és rámutat, mely direktívák könnyen kihasználhatók. Íme egy CSP-irányelv, amely lehetővé teszi a Google API-kat:

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'

Következtetés

Ebben a rövid útmutatóban áttekintettük, mi az a Cross-Site Scripting (XSS), és hogyan működik holisztikus szinten. Ezután megvizsgáltunk néhány XSS-megelőző intézkedést, amelyek könnyen megvalósíthatók a Spring Boot segítségével, hogy biztonságossá tegyék alkalmazásait, és beállítottunk egy Tartalom-biztonsági szabályzat (CSP).

Végül megvizsgáltuk a CSP-irányelveket, és megvizsgáltunk néhány különböző biztonságos irányelvet.

Időbélyeg:

Még több Stackabus