Cross-site scripting (XSS) er en type sikkerhedsudnyttelse, der gør det muligt for angribere at injicere ondsindede scripts på websteder ved hjælp af klientkode. Det udgør en betydelig trussel, da angribere kan bruge det til at efterligne brugere, få adgang til følsomme data eller endda ændre sideindholdet på webstedet.

Det er så farligt, at det i 2021 var nummer to på den fælles svaghedsopregningsliste over de 25 mest farlige svagheder. Det betyder, at hvis du opretter websteder, skal du kende til cross-site scripting og hvordan du forhindrer det.

Hvordan fungerer cross-site scripting?

Før du forstår, hvordan cross-site scripting fungerer, er det vigtigt at vide, hvad same-origin policy (SOP) betyder. SOP er en sikkerhedsmekanismepolitik, der begrænser et websted (én oprindelse) fra at læse eller skrive til et andet websted (en anden oprindelse). Det forhindrer ondsindede websteder i at sende ondsindet kode til betroede websteder.

Cross-site scripting-angreb forsøger at omgå denne politik ved at udnytte browserens manglende evne til at skelne mellem legitim HTML og ondsindet kode. For eksempel kan en angriber injicere JavaScript-kode i målwebstedet. Antag, at browseren udfører koden, og angriberen får adgang til sessionstokens, cookies og andre følsomme data.

Der er tre typer cross-site scripting, som hackere bruger til at bryde websteder: reflekteret, lagret og DOM XSS.

Sådan forhindres cross-site scripting i Node

Følgende er nogle trin, du kan tage for at forhindre cross-site scripting i Node.

Rengør input

Angribere skal være i stand til at sende data til din webapplikation og vise dem til en bruger for at kunne udføre et XSS-angreb. Derfor er den første forebyggende foranstaltning, du skal tage, at rense alle de input, din applikation modtager fra sine brugere. Dette er afgørende, fordi det registrerer de falske data, før serveren udfører dem. Du kan gøre dette manuelt eller bruge et værktøj som f.eks validator hvilket gør processen hurtigere.

For eksempel kan du bruge validator for at undslippe HTML-tags i brugerinput som nedenfor.

importere validator fra "validator";
lad userInput = `Jane <script onload="alert('XSS hack');"></script>`;
lade sanitizedInput = validator.escape (brugerInput);

Hvis du skulle køre ovenstående kode, ville det rensede output være dette.

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

Begræns brugerinput

Begræns den type input, som en bruger kan indsende i din formular gennem validering. For eksempel, hvis du har et inputfelt til en e-mail, tillad kun input med e-mail-formatet. På denne måde minimerer du chancerne for, at angribere sender dårlige data. Du kan også bruge validatorpakken til dette.

Implementer kun HTTP Cookie-politik

Cookies gemmer data i en lokal cache og send den tilbage til serveren via HTTP. Men angribere kan også bruge JavaScript til at få adgang til dem via browseren, så de er nemme mål.

Den eneste HTTP-cookie er en politik, der forhindrer scripts på klientsiden i at få adgang til cookiedata. Det betyder, at selvom din applikation indeholder en sårbarhed, og en angriber udnytter den, vil de ikke kunne få adgang til cookien.

Her er et eksempel på, hvordan du kan implementere politikken for kun HTTP-cookie i Node.js ved hjælp af Express:

app.brug(udtrykke.session({
hemmelighed: "hemmelighed",
cookie: {
httpKun: rigtigt,
sikker: rigtigt
}
}))

Hvis en angriber forsøgte at få adgang til cookien med httpKun tag sat til true som vist ovenfor, ville de modtage en tom streng.

Cross-Site Scripting er et nemt mål for hackere

Selvom det er afgørende at sikre din applikations sikkerhed, kan det blive kompliceret at implementere det. I dette indlæg lærte du om cross-site scripting-angreb, og hvordan du kan forhindre dem i Node. Da angribere udnytter sårbarheder i din applikation til at injicere ondsindet kode i din server, skal du altid sørge for at rense brugerinput. Ved at gøre dette fjerner du den ondsindede kode, før din applikation gemmer den eller udfører den.