Als u net begint met uw webontwikkeling of Node.js-reis, weet u misschien niet hoe belangrijk het is om uw app te beveiligen.
Express.js biedt een krachtige oplossing voor het bouwen van backend-webapps, maar schiet tekort op het gebied van beveiliging. Wanneer u een webtoepassing bouwt, heeft u adequate beveiligingsmaatregelen nodig om de gegevens van uw gebruikers te beschermen.
Gelukkig zijn er methoden die u kunt gebruiken om de beveiliging van uw Express.js-toepassingen te verbeteren. Deze tips helpen allemaal om de beveiliging van uw applicaties op verschillende manieren te versterken.
Stel een Express.js-toepassing in
Begin met het opzetten van een demo Express.js-webserver gebruik makend van npm, de Node Package Manager. Maak lokaal een projectmap en wijzig de map ernaar op uw terminal.
mkdir express-project
cd express-project
Maak vervolgens een pakket.json bestand in de hoofdmap.
npm begin -y
Ga je gang en installeer Express.js.
npm installeren express
Maak ten slotte een server.js bestand in de hoofdmap van uw projectmap en voeg de volgende code toe om een eenvoudige webserver in te stellen.
const uitdrukken = vereisen("nadrukkelijk")
const app = uitdrukken()
const PORT = proces.env. HAVEN || 5000app.get("/", (req, res) => {
res.json("Hallo Wereld!")
})
app.luisteren (PORT, () => {
troosten.log(`Startserver aan http://localhost:${PORT}`)
})
Start de server met dit commando:
knooppunt server.js
U bent nu klaar om enkele van de maatregelen te verkennen die u kunt gebruiken om uw Express.js-toepassing te beveiligen.
1. Express.js-applicaties beveiligen met een helm
Helm is een Node.js-middleware die helpt bij het beveiligen van server-side apps door verschillende HTTP-beveiligingsheaders in te stellen. Deze headers bieden essentiële verdedigingsmechanismen tegen gemeenschappelijke beveiligingsproblemen in de backend, zoals cross-site scripting (XSS), cross-site request forgery (CSRF) en nog veel meer.
Express.js configureert standaard geen HTTP-beveiligingsheaders, waardoor een mogelijk beveiligingslek ontstaat dat mogelijk gevoelige headers blootlegt. Met behulp van deze informatie kunnen kwaadwillende actoren mogelijk ongeoorloofde toegang krijgen of uw app anderszins verstoren.
Helm fungeert als een vitaal schild en zorgt ervoor dat de HTTP-reacties van de applicatie de nodige beveiligingsmaatregelen nemen, waardoor het potentiële aanvalsoppervlak aanzienlijk wordt verkleind.
De beveiliging van Express.js-applicaties verkennen zonder helm
Onderzoek de headers van de toepassing terwijl de server draait. Ga je gang en maak HTTP-verzoeken aan de API met behulp van Postman of een andere client die antwoordkoppen laat zien. De meeste browsers bevatten een set ontwikkelaarstools waarmee u dit kunt doen.
Wanneer u verzoeken naar het home-eindpunt verzendt, ziet u vergelijkbare resultaten in de Kopteksten gedeelte van het antwoord binnen Postman.
Let op de X-aangedreven door koptekst. Doorgaans gebruiken backend-technologieën deze header om het framework of andere software aan te geven die de webapplicatie aandrijft. Meestal moet u de X-aangedreven door header in een productieomgeving.
Door dit te doen, voorkomt u dat potentiële aanvallers waardevolle informatie verkrijgen die ze zouden kunnen gebruiken om bekende kwetsbaarheden in verband met uw technologiestack te misbruiken.
Test de beveiligingsconfiguratie van de Express.js-server
Om de beveiligingsstatus van uw applicaties te beoordelen, gebruiken we de Beveiligingskoppen online hulpmiddel. Deze app is speciaal ontworpen om de beveiligingsconfiguratie van HTTP-headers voor client-side- en server-side-applicaties te evalueren.
Eerst moet u uw lokale Express.js-server toegankelijk maken via internet. Er zijn twee mogelijke benaderingen om dit te bereiken: uw Express.js-toepassing implementeren op een cloudserver of ngrok gebruiken.
Om het te gebruiken, download de ngrok zip-bestand, pak het uitvoerbare bestand uit en start de toepassing. Voer vervolgens de volgende opdracht uit om uw lokale Express.js-server te hosten met ngrok.
ngrok http 5000
ngrok zal wat korte informatie uitvoeren die er als volgt uitziet:
Kopieer de verstrekte doorstuur-URL en plak het in de Beveiligingskoppen' invoervak en klik op het Scannen knop.
Zodra de beveiligingsevaluatie is voltooid, ontvangt u een vergelijkbaar rapport.
Op basis van het rapport is het duidelijk dat de Express.js-server een slechte kreeg F cijfer. Deze lage score is het resultaat van het ontbreken van essentiële HTTP-beveiligingsheaders in de serverconfiguratie. Door hun afwezigheid is de server kwetsbaar voor potentiële beveiligingsrisico's.
Integreer Helm in de Express.js-toepassing
Ga nu door en integreer Helmet in uw Express.js-applicatie. Voer de onderstaande opdracht uit om de afhankelijkheid te installeren.
npm helm installeren
Werk uw server.js-bestand bij en importeer Helmet.
const helm = vereisen("helm")
Voeg nu Helmet toe aan uw Express.js-toepassing.
app.gebruik (helm())
Draai ten slotte de ontwikkelserver op, kopieer de doorstuurlink van ngrok's terminal en plak deze in het Beveiligingskop invoerveld om de lokale server opnieuw te scannen. Zodra de nieuwe scan is voltooid, zou u vergelijkbare resultaten moeten zien als deze:
Na de integratie van Helmet bevat Express.js verschillende essentiële beveiligingsheaders in het HTTP-antwoord. Deze substantiële verbetering zorgde ervoor dat de Express.js-applicatie overging naar een A cijfer.
Hoewel Helmet geen onfeilbare oplossing is, verbetert het de algehele beveiliging van uw Express.js-toepassing aanzienlijk.
2. Express.js-applicaties beveiligen met Joi, een invoervalidatiebibliotheek
Joi is een invoervalidatiebibliotheek die Express.js-apps helpt beveiligen door een handige manier te bieden om gebruikersinvoer te valideren en op te schonen. Door validatieschema's te definiëren met behulp van Joi, kunt u de verwachte structuur, gegevenstypen en beperkingen voor inkomende gegevens specificeren.
Joi valideert de invoer tegen het gedefinieerde schema en zorgt ervoor dat deze voldoet aan de opgegeven criteria. Dit helpt veelvoorkomende beveiligingsproblemen zoals data-injectie, cross-site scripting (XSS) en andere datamanipulatieaanvallen te voorkomen.
Volg deze stappen om Joi in uw applicatie te integreren.
- Joi installeren.
npm installeer joi
- Importeer Joi in uw server.js-bestand.
const Joi = vereisen('joi');
- Maak een Joi-gegevensvalidatieschema dat de verwachte structuur en eventuele beperkingen voor de invoergegevens definieert.
const schema = Joi.object({
e-mail: Joi.string().email().required(),
wachtwoord: Joi.string().min(5.max(16).vereist()
}); - Valideer alle inkomende gegevens met behulp van het gedefinieerde schema.
const { fout, waarde } = schema.validate (req.body);
als (fout) {
// Omgaan met validatiefout
// Retourneer bijvoorbeeld een foutreactie
opbrengst res.status(400.json({ fout: fout details[0].bericht });
}
Door deze stappen te implementeren, kunt u gebruikmaken van de invoervalidatiemogelijkheden van Joi om uw Express.js-applicaties te beveiligen. Dit zorgt ervoor dat de inkomende gegevens voldoen aan gedefinieerde beperkingen, waardoor mogelijke beveiligingsrisico's voor gegevensmanipulatie worden voorkomen.
3. Express.js-applicaties beveiligen met behulp van het CORS-mechanisme
Cross-Origin Resource Sharing (CORS) is een mechanisme dat webservers gebruiken om te beheren welke origins (clients of andere server-side applicaties) toegang hebben tot hun beschermde bronnen. Dit mechanisme helpt beschermen tegen ongeautoriseerde cross-origin-verzoeken, waardoor problemen zoals cross-site scripting (XSS)-aanvallen worden voorkomen.
Volg deze stappen om Express.js-toepassingen te beveiligen met behulp van CORS:
- Installeer het CORS-pakket.
npm installeer cors
- Vereist en gebruik CORS-middleware in het bestand server.js.
const koren = vereisen('cors');
app.gebruik (cors());
Door de CORS-middleware te integreren in uw Express.js-toepassing, maakt u Cross-Origin Resource Sharing mogelijk. Dit zorgt ervoor dat u potentiële beveiligingsrisico's met betrekking tot cross-origin-aanvragen beperkt.
Met gemak server-side applicaties beveiligen
U kunt een of meer van deze essentiële maatregelen gebruiken om de beveiliging van uw Express.js-toepassingen te verbeteren.
Hoewel er veel maatregelen en benaderingen beschikbaar zijn om uw server-side applicaties te beschermen, is het belangrijkste dat u prioriteit moet geven aan beveiliging gedurende de gehele ontwikkelingslevenscyclus. Dit is een taak die begint bij de ontwerpfase en die moet doorgaan tot en met de implementatie.