Sikker koding i Node.js
Implementer beste praksis for å forebygge vanlige sårbarheter som XSS, CSRF og SQL-injeksjon i Node.js-koden din.
Sikker koding i Node.js er en gratis leksjon i Bootcamp i backendutvikling med Node.js på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Bootcamp i backendutvikling med Node.js, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Bootcamp i backendutvikling med Node.js inneholder totalt 4 leksjoner.
Hvorfor sikker koding er viktig
Velkommen! I denne leksjonen skal vi gå gjennom viktige prinsipper for sikker koding i Node.js. Det er like viktig å skrive sikker kode som å skrive kode som fungerer.
Ved å forstå og forhindre vanlige sårbarheter beskytter du applikasjonen og brukerne mot ondsinnede angrep.
- Datainnbrudd: Sensitiv informasjon blir eksponert.
- Nedetid: Angrep kan krasje applikasjonen.
- Omdømmeskade: Tap av brukernes tillit.

Cross-Site Scripting (XSS)
Cross-Site Scripting (XSS) er en vanlig sårbarhet i webapplikasjoner der angripere injiserer skadelige skript (vanligvis JavaScript) i nettsider som vises til andre brukere.
Når brukerens nettleser laster inn den berørte siden, kjøres det skadelige skriptet. Det kan potensielt stjele informasjonskapsler eller økt-tokens, eller endre innholdet på siden.
- Reflektert XSS: Skriptet kjøres umiddelbart fra brukerinndata.
- Lagret XSS: Det skadelige skriptet lagres i databasen og leveres deretter til brukerne.
- DOM-basert XSS: Sårbarhet i klientkode som endrer DOM-en.
Forhindre XSS: Escap output
Det viktigste forsvaret mot XSS er å aldri stole på brukerinndata og alltid escape dem før de gjengis som HTML.
Det innebærer å konvertere tegn som <, >, & og " til tilsvarende HTML-entiteter (for eksempel < og >). På denne måten tolker nettleseren dem som tekst, ikke som kjørbar kode.
Prøv å kjøre dette eksempelet:
function escapeHtml(str) {
return str
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
const userInput = "<h1>Hello</h1><script>alert('XSS!');</script>";
const safeOutput = escapeHtml(userInput);
console.log("Original Input:\n", userInput);
console.log("\nEscaped Output (safe for HTML):\n", safeOutput);Forhindre XSS: CSP
Utover escaping legger en Content Security Policy (CSP) til et ekstra forsvarslag mot XSS.
CSP er en HTTP-header som forteller nettlesere hvilke dynamiske ressurser (skript, stiler og bilder) som kan lastes inn, og hvor de kan lastes fra. Den kan i betydelig grad begrense konsekvensene av XSS-angrep ved å blokkere uautorisert kjøring av skript.
Eksempel på header: Content-Security-Policy: default-src 'self'; script-src 'self' trusted.cdn.com;
SQL-injeksjon forklart
SQL Injection (SQLi) er et sikkerhetssårbarhet i nettapplikasjoner som gjør det mulig for en angriper å påvirke spørringene en applikasjon sender til databasen.
Ved å injisere skadelig SQL-kode i inndatafelt kan en angriper lure databasen til å utføre utilsiktede kommandoer, for eksempel avsløre sensitive data, endre data eller til og med slette tabeller.
Et vanlig eksempel er å endre en innloggingsspørring for å omgå autentisering uten å kjenne passordet.
Forhindre SQLi: Parametriserte spørringer
Den mest effektive måten å forhindre SQL Injection på er å bruke parametriserte spørringer (også kjent som prepared statements).
I stedet for å bygge brukerinput direkte inn i SQL-strengen bruker du plassholdere for verdiene. Databasen behandler deretter disse plassholderne som data, ikke som kjørbar SQL-kode, og hindrer dermed ondsinnet injeksjon.
ORM-er (Object-Relational Mappers), som Mongoose for MongoDB eller Sequelize for SQL-databaser, håndterer dette automatisk.
/*
This is a conceptual example for parameterized queries.
In a real app, you'd use a database driver or ORM (e.g., 'pg' for PostgreSQL).
*/
function executeSafeQuery(dbClient, userId) {
// Using a placeholder (?) ensures the input is treated as data, not code.
const query = "SELECT * FROM users WHERE id = ?";
console.log(`Executing SQL: "${query}" with param: "${userId}"`);
// In a real scenario, dbClient.query would execute this safely.
}
// Mock database client for demonstration purposes
const mockDbClient = {
query: (sql, params, callback) => {
// Simulate actual query execution logic here
console.log(" (Mock DB: Input handled safely)");
callback(null, [{ id: params, name: "John Doe" }]);
}
};
const maliciousUserId = "1 OR 1=1"; // This would be dangerous if not parameterized
const safeUserId = "1";
console.log("Attempting a 'malicious' ID (will be treated as a string value): ");
executeSafeQuery(mockDbClient, maliciousUserId);
console.log("\nAttempting a safe ID: ");
executeSafeQuery(mockDbClient, safeUserId);Cross-Site Request Forgery (CSRF)
Cross-Site Request Forgery (CSRF) er et angrep som lurer en innlogget bruker til å utføre en utilsiktet handling i en nettapplikasjon.
Se for deg at du er logget inn i nettbanken. En angriper sender deg en skadelig lenke (for eksempel i en e-post). Hvis du klikker på den, kan angriperens nettsted sende en forespørsel til banken din ved hjelp av den autentiserte økten din og tvinge deg til å overføre penger uten at du vet det.
Det avgjørende er at nettleseren automatisk sender øktinformasjonskapslene dine med forespørselen til bankens domene.
Forhindre CSRF: CSRF-tokener
For å forhindre CSRF bruker vi CSRF-tokener. Serveren genererer et unikt og uforutsigbart token for hver brukerøkt og bygger det inn i skjemaer eller headere.
Når brukeren sender inn en forespørsel, kontrollerer serveren om tokenet som ble sendt inn, samsvarer med tokenet som er lagret i brukerens økt. Hvis de ikke samsvarer, avvises forespørselen.
Ettersom en angriper ikke kan kjenne til eller forfalske dette unike tokenet for en annen bruker, kan angriperen ikke lure brukeren til å sende en gyldig forespørsel.
/*
This is a conceptual example for CSRF token handling.
It is not runnable as a standalone script without a web server (e.g., Express).
*/
// 1. Server generates and stores a token in the user's session:
function generateCsrfToken() {
// In a real app, use a crypto-secure random string generator.
return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
}
const userSession = { id: "user123", csrfToken: null };
userSession.csrfToken = generateCsrfToken();
console.log("Server generated CSRF token for user:", userSession.csrfToken);
// 2. Server embeds this token in forms sent to the client:
const formHtml = `<form action="/transfer" method="POST">
<input type="hidden" name="_csrf" value="${userSession.csrfToken}">
<input type="number" name="amount">
<button type="submit">Transfer</button>
</form>`;
console.log("\nForm snippet with token (sent to client):\n", formHtml);
// 3. On submission, the server validates the token:
function validateCsrfToken(submittedToken, sessionToken) {
return submittedToken === sessionToken;
}
const userSubmittedToken = userSession.csrfToken; // Simulate valid submission
const attackerSubmittedToken = "fake_token_from_attacker";
console.log("\nValidation results:");
console.log(" Valid submission:", validateCsrfToken(userSubmittedToken, userSession.csrfToken));
console.log(" Attacker's submission:", validateCsrfToken(attackerSubmittedToken, userSession.csrfToken));Andre sikkerhetsh headere
I tillegg til de viktigste sårbarhetene kan flere andre HTTP-sikkerhetsh headere styrke sikkerheten i Node.js-applikasjonen din:
X-Content-Type-Options: nosniff: Hindrer nettlesere i å «sniffe» innholdstypen i et svar, noe som kan forhindre XSS-angrep.X-Frame-Options: DENY: Hindrer at nettstedet ditt bygges inn i en<iframe>og beskytter mot clickjacking-angrep.Strict-Transport-Security (HSTS): Tvinger nettlesere til å koble seg til nettstedet ditt kun ved hjelp av HTTPS, og forhindrer nedgraderingsangrep.
Disse headerne settes vanligvis ved hjelp av middleware i rammeverk som Express.js.
Kontroll av sikkerhetssårbarheter
Hvilket av følgende er det mest effektive forsvaret mot SQL Injection-angrep?
Oppsummering av sikker koding
Godt jobbet! Du har lært om viktige metoder for sikker koding i Node.js.
- XSS: Forhindres ved å escape alt brukergenerert innhold før det gjengis som HTML, og ved å bruke CSP.
- SQL Injection: Forhindres ved alltid å bruke parametriserte spørringer eller ORM-er.
- CSRF: Forhindres ved å implementere CSRF-tokener for forespørsler som endrer tilstand.
- Husk også å bruke andre sikkerhetsh headere, som
X-Content-Type-OptionsogX-Frame-Options, for et mer robust forsvar.
Anta alltid at brukerinput er skadelig, og valider, rens og escape den på riktig måte!
Lær deg JavaScript med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 22
- Leksjoner
- 92
Ofte stilte spørsmål
Er leksjonen «Sikker koding i Node.js» gratis?
Ja – hele teksten i «Sikker koding i Node.js» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Bootcamp i backendutvikling med Node.js-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Bootcamp i backendutvikling med Node.js inneholder totalt 4 leksjoner.
Hva lærer jeg i «Sikker koding i Node.js»?
Implementer beste praksis for å forebygge vanlige sårbarheter som XSS, CSRF og SQL-injeksjon i Node.js-koden din. Du øver på Bootcamp i backendutvikling med Node.js med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Bootcamp i backendutvikling med Node.js?
Ingen tidligere erfaring er nødvendig. Bootcamp i backendutvikling med Node.js på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Sikker koding i Node.js»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Bootcamp i backendutvikling med Node.js-leksjonen?
Ja. Alle Bootcamp i backendutvikling med Node.js-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Forstå OWASP Top 10
- Sikker koding i Node.js
- Datakryptering og hashing
- Begrensning av forespørselsrate og beskyttelse mot brute force