Cross-site scripting (XSS) is een type beveiligingsexploit waarmee aanvallers kwaadaardige scripts op websites kunnen injecteren met behulp van clientcode. Het vormt een aanzienlijke bedreiging omdat aanvallers het kunnen gebruiken om zich voor te doen als gebruikers, toegang te krijgen tot gevoelige gegevens of zelfs de pagina-inhoud van de website te wijzigen.
Het is zo gevaarlijk dat het in 2021 nummer twee was in de lijst met algemene zwakheden van de top 25 van gevaarlijkste zwakheden. Dit betekent dat als u websites maakt, u moet weten wat cross-site scripting is en hoe u dit kunt voorkomen.
Hoe werkt cross-site scripting?
Voordat u begrijpt hoe cross-site scripting werkt, is het belangrijk om te weten wat het same-origin-beleid (SOP) betekent. SOP is een beveiligingsmechanismebeleid dat een website (een oorsprong) beperkt in het lezen of schrijven naar een andere website (een andere oorsprong). Het voorkomt dat kwaadwillende websites schadelijke code naar vertrouwde websites sturen.
Cross-site scripting-aanvallen proberen dit beleid te omzeilen door misbruik te maken van het onvermogen van de browser om onderscheid te maken tussen legitieme HTML en kwaadaardige code. Een aanvaller kan bijvoorbeeld JavaScript-code in de doelwebsite injecteren. Stel dat de browser de code uitvoert en de aanvaller toegang krijgt tot sessietokens, cookies en andere gevoelige gegevens.
Er zijn drie soorten cross-site scripting die hackers gebruiken om websites te kraken: gereflecteerd, opgeslagen en DOM XSS.
Cross-site scripting in Node voorkomen
Hieronder volgen enkele stappen die u kunt nemen om cross-site scripting in Node te voorkomen.
Invoer zuiveren
Aanvallers moeten gegevens naar uw webapplicatie kunnen sturen en aan een gebruiker kunnen tonen om een XSS-aanval uit te voeren. Daarom is de eerste preventieve maatregel die u moet nemen het opschonen van alle invoer die uw toepassing van zijn gebruikers ontvangt. Dit is cruciaal omdat het de valse gegevens detecteert voordat de server ze uitvoert. U kunt dit handmatig doen of een tool gebruiken zoals validator wat het proces sneller maakt.
U kunt bijvoorbeeld de validator om te ontsnappen aan HTML-tags in gebruikersinvoer zoals hieronder.
importeren validator van "validateur";
laat userInput = `Jane' <script onload="waarschuwing('XSS-hack');"></script>`;
laten sanitizedInput = validator.escape (userInput);
Als u de bovenstaande code zou uitvoeren, zou dit de gezuiverde uitvoer zijn.
Jane &het; script onload=" waarschuwing('XSS-hack');">&het;/ script>
Gebruikersinvoer beperken
Beperk het type invoer dat een gebruiker in uw formulier kan indienen door middel van validatie. Als je bijvoorbeeld een invoerveld voor een e-mail hebt, sta dan alleen invoer toe met het e-mailformaat. Op deze manier minimaliseert u de kans dat aanvallers slechte gegevens indienen. U kunt hiervoor ook het validatorpakket gebruiken.
Alleen HTTP-cookiebeleid implementeren
Cookies slaan gegevens op in een lokale cache en stuur het terug naar de server via HTTP. Maar aanvallers kunnen ook JavaScript gebruiken om toegang te krijgen via de browser, dus ze zijn een gemakkelijk doelwit.
De HTTP-cookie is een beleid dat voorkomt dat scripts aan de clientzijde toegang krijgen tot cookiegegevens. Dit betekent dat zelfs als uw toepassing een kwetsbaarheid bevat en een aanvaller deze misbruikt, deze geen toegang heeft tot de cookie.
Hier is een voorbeeld van hoe u het HTTP-cookiebeleid in Node.js kunt implementeren met Express:
app.gebruiken(uitdrukken.sessie({
geheim: "geheim",
koekje: {
httpAlleen: WAAR,
zeker: WAAR
}
}))
Als een aanvaller toegang probeerde te krijgen tot de cookie met de httpAlleen tag ingesteld op true zoals hierboven weergegeven, zouden ze een lege tekenreeks ontvangen.
Cross-site scripting is een gemakkelijk doelwit voor hackers
Hoewel het waarborgen van de beveiliging van uw toepassing cruciaal is, kan de implementatie ervan ingewikkeld worden. In dit bericht heb je geleerd over cross-site scripting-aanvallen en hoe je ze kunt voorkomen in Node. Aangezien aanvallers misbruik maken van kwetsbaarheden in uw toepassing om schadelijke code in uw server te injecteren, moet u er altijd voor zorgen dat u gebruikersinvoer opschoont. Door dit te doen, verwijdert u de schadelijke code voordat uw toepassing deze opslaat of uitvoert.