Cross-site scripting (XSS) er en type sikkerhetsutnyttelse som lar angripere injisere ondsinnede skript på nettsteder ved hjelp av klientkode. Det utgjør en betydelig trussel ettersom angripere kan bruke det til å etterligne brukere, få tilgang til sensitive data eller til og med endre sideinnholdet på nettstedet.

Det er så farlig at det i 2021 var nummer to i den vanlige oppregningslisten over de 25 farligste svakhetene. Dette betyr at hvis du lager nettsteder, må du vite om skripting på tvers av nettsteder og hvordan du kan forhindre det.

Hvordan fungerer skripting på tvers av nettsteder?

Før du forstår hvordan cross-site scripting fungerer, er det viktig å vite hva same-origin policy (SOP) betyr. SOP er en sikkerhetsmekanismepolicy som begrenser et nettsted (én opprinnelse) fra å lese eller skrive til et annet nettsted (en annen opprinnelse). Det forhindrer ondsinnede nettsteder fra å sende ondsinnet kode til pålitelige nettsteder.

Skriptangrep på tvers av nettsteder prøver å omgå denne policyen ved å utnytte nettleserens manglende evne til å skille mellom legitim HTML og ondsinnet kode. For eksempel kan en angriper injisere JavaScript-kode på målnettstedet. Anta at nettleseren kjører koden, og angriperen får tilgang til økttokens, informasjonskapsler og andre sensitive data.

instagram viewer

Det finnes tre typer skripting på tvers av nettsteder som hackere bruker for å ødelegge nettsteder: reflektert, lagret og DOM XSS.

Hvordan forhindre cross-site scripting i Node

Følgende er noen trinn du kan ta for å forhindre cross-site scripting i Node.

Rengjør input

Angripere må kunne sende data til nettapplikasjonen din og vise dem til en bruker for å kunne utføre et XSS-angrep. Derfor er det første forebyggende tiltaket du må ta, å rense alle innspillene applikasjonen din mottar fra brukerne. Dette er avgjørende fordi det oppdager falske data før serveren kjører dem. Du kan gjøre dette manuelt eller bruke et verktøy som validator som gjør prosessen raskere.

Du kan for eksempel bruke validator for å unnslippe HTML-tagger i brukerinndata som nedenfor.

import validator fra "validator";
la userInput = `Jane <script onload="varsling('XSS hack');"></script>`;
la sanitizedInput = validator.escape (userInput);

Hvis du skulle kjøre koden ovenfor, ville den rensede utgangen være denne.

Jane &lt; script onload=&quot; varsling(&#x27;XSS-hack&#x27;);&quot;&gt;&lt;&#x2F; manus&gt;

Begrens brukerinndata

Begrens typen inndata en bruker kan sende inn i skjemaet ditt gjennom validering. Hvis du for eksempel har et inndatafelt for en e-post, tillat bare inndata med e-postformatet. På denne måten minimerer du sjansene for at angripere sender inn dårlige data. Du kan også bruke validatorpakken til dette.

Implementer retningslinjer for kun HTTP-informasjonskapsler

Informasjonskapsler lagrer data i en lokal cache og send den tilbake til serveren via HTTP. Men angripere kan også bruke JavaScript for å få tilgang til dem via nettleseren, så de er enkle mål.

Den eneste HTTP-informasjonskapselen er en policy som forhindrer skript på klientsiden fra å få tilgang til informasjonskapseldata. Dette betyr at selv om applikasjonen din inneholder en sårbarhet og en angriper utnytter den, vil de ikke få tilgang til informasjonskapselen.

Her er et eksempel på hvordan du kan implementere policyen for kun HTTP-informasjonskapsler i Node.js ved å bruke Express:

app.bruk(uttrykke.økt({
hemmelig: "hemmelig",
kjeks: {
httpBare: ekte,
sikre: ekte
}
}))

Hvis en angriper prøvde å få tilgang til informasjonskapselen med httpBare tag satt til true som vist ovenfor, vil de motta en tom streng.

Skripting på tvers av nettsteder er et enkelt mål for hackere

Selv om det er avgjørende å sikre sikkerheten til applikasjonen din, kan det bli komplisert å implementere det. I dette innlegget lærte du om skriptangrep på tvers av nettsteder og hvordan du kan forhindre dem i Node. Siden angripere utnytter sårbarhetene i applikasjonen din for å injisere skadelig kode på serveren din, sørg alltid for at du renser brukerinndata. Ved å gjøre dette fjerner du den skadelige koden før applikasjonen lagrer den eller kjører den.