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ékchild-src
– Érvényes webmunkás-forrásokframe-src
– Érvényes források ehhezs és
s
img-src
– Érvényes források a képekhezmedia-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 ehhezelemek
base-uri
– Korlátozza a következőről elérhető erőforrásokatelem
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.