Cross-site scripting (XSS) är en typ av säkerhetsexploatering som tillåter angripare att injicera skadliga skript på webbplatser med hjälp av klientkod. Det utgör ett betydande hot eftersom angripare kan använda det för att utge sig för att vara användare, få tillgång till känslig data eller till och med ändra sidinnehållet på webbplatsen.
Det är så farligt att det 2021 var nummer två i den gemensamma svaghetsuppräkningen över de 25 mest farliga svagheterna. Det betyder att om du skapar webbplatser måste du känna till skript på flera webbplatser och hur du förhindrar det.
Hur fungerar cross-site scripting?
Innan du förstår hur cross-site scripting fungerar är det viktigt att veta vad same-origin policy (SOP) betyder. SOP är en säkerhetsmekanism som begränsar en webbplats (ett ursprung) från att läsa eller skriva till en annan webbplats (ett annat ursprung). Det förhindrar skadliga webbplatser från att skicka skadlig kod till betrodda webbplatser.
Skriptattacker över flera webbplatser försöker kringgå denna policy genom att utnyttja webbläsarens oförmåga att skilja mellan legitim HTML och skadlig kod. Till exempel kan en angripare injicera JavaScript-kod på målwebbplatsen. Anta att webbläsaren kör koden och angriparen får tillgång till sessionstokens, cookies och annan känslig data.
Det finns tre typer av cross-site scripting som hackare använder för att bryta webbplatser: reflekterad, lagrad och DOM XSS.
Hur man förhindrar cross-site scripting i Node
Följande är några steg du kan vidta för att förhindra cross-site scripting i Node.
Desinficera input
Angripare måste kunna skicka data till din webbapplikation och visa den för en användare för att kunna utföra en XSS-attack. Därför är den första förebyggande åtgärden du måste vidta att rensa all input som din applikation får från sina användare. Detta är avgörande eftersom det upptäcker falska data innan servern kör det. Du kan göra detta manuellt eller använda ett verktyg som validator vilket gör processen snabbare.
Du kan till exempel använda validator för att undvika HTML-taggar i användarinmatning som nedan.
importera validator från "validator";
låt userInput = `Jane <script onload="varna('XSS-hack');"></script>`;
låta sanitizedInput = validator.escape (userInput);
Om du skulle köra ovanstående kod skulle den sanerade utdata vara denna.
Jane < script onload=" varna('XSS-hack');"></ manus>
Begränsa användarinmatning
Begränsa vilken typ av inmatning en användare kan skicka i ditt formulär genom validering. Om du till exempel har ett inmatningsfält för ett e-postmeddelande, tillåt endast inmatning med e-postformatet. På så sätt minimerar du chanserna för angripare att skicka in dålig data. Du kan också använda valideringspaketet för detta.
Implementera endast HTTP Cookie Policy
Cookies lagrar data i en lokal cache och skicka den tillbaka till servern via HTTP. Men angripare kan också använda JavaScript för att komma åt dem via webbläsaren, så de är enkla mål.
Enbart HTTP-cookien är en policy som förhindrar skript på klientsidan från att komma åt cookiedata. Detta innebär att även om din applikation innehåller en sårbarhet och en angripare utnyttjar den, kommer de inte att kunna komma åt cookien.
Här är ett exempel på hur du kan implementera policyn för endast HTTP-cookies i Node.js med Express:
app.använda sig av(uttrycka.session({
hemlighet: "hemlighet",
cookie: {
http Endast: Sann,
säkra: Sann
}
}))
Om en angripare försökte komma åt cookien med httpEndast taggen satt till true som visas ovan, skulle de få en tom sträng.
Cross-site scripting är ett enkelt mål för hackare
Samtidigt som det är avgörande att säkerställa säkerheten för din applikation, kan det bli komplicerat att implementera det. I det här inlägget lärde du dig om cross-site scripting-attacker och hur du kan förhindra dem i Node. Eftersom angripare utnyttjar sårbarheter i din applikation för att injicera skadlig kod på din server, se alltid till att du rengör användarinmatning. Genom att göra detta tar du bort den skadliga koden innan din applikation lagrar den eller kör den.