Ako ste tek na početku svog web razvoja ili Node.js putovanja, možda niste svjesni koliko je važno osigurati svoju aplikaciju.
Express.js pruža učinkovito rješenje za izradu pozadinskih web-aplikacija, ali nema dovoljno sigurnosti. Kada gradite web aplikaciju, potrebne su vam odgovarajuće sigurnosne mjere za zaštitu podataka vaših korisnika.
Srećom, postoje metode kojima možete poboljšati sigurnost svojih Express.js aplikacija. Svi ovi savjeti pomoći će poboljšati sigurnost vaših aplikacija koristeći različite pristupe.
Postavite Express.js aplikaciju
Započnite postavljanjem demonstracije Express.js web poslužitelj korištenjem npm, upravitelj paketa čvora. Stvorite mapu projekta lokalno i promijenite direktorij u nju na svom terminalu.
mkdir express-projekt
cd express-projekt
Zatim stvorite a paket.json datoteku u korijenskom direktoriju.
npm init -y
Samo naprijed i instalirajte Express.js.
npm instalirajte ekspresno
Na kraju, stvorite a server.js datoteku u korijenskom direktoriju mape vašeg projekta i dodajte sljedeći kod za postavljanje osnovnog web poslužitelja.
konst izraziti = zahtijevati("izraziti")
konst app = express()
konst LUKA = proces.env. LUKA || 5000app.get("/", (req, res) => {
res.json("Pozdrav svijete!")
})
app.listen (PORT, () => {
konzola.log(`Pokretanje poslužitelja uključeno http://localhost:${PORT}`)
})
Pokrenite poslužitelj ovom naredbom:
poslužitelj čvora.js
Sada ste spremni istražiti neke od mjera koje možete koristiti za zaštitu svoje Express.js aplikacije.
1. Zaštita Express.js aplikacija pomoću kacige
Kaciga je međuprogram Node.js koji pomaže zaštititi aplikacije na strani poslužitelja postavljanjem različitih HTTP sigurnosnih zaglavlja. Ovi zaglavlja pružaju bitne obrambene mehanizme protiv uobičajene sigurnosne ranjivosti pozadine, kao što je cross-site scripting (XSS), cross-site request forgery (CSRF) i još mnogo toga.
Express.js ne konfigurira HTTP sigurnosna zaglavlja prema zadanim postavkama, ostavljajući potencijalnu sigurnosnu grešku koja otkriva potencijalno osjetljiva zaglavlja. Upotrebom ovih informacija zlonamjerni bi akteri mogli dobiti neovlašteni pristup ili na drugi način poremetiti vašu aplikaciju.
Kaciga djeluje kao vitalni štit, osiguravajući da HTTP odgovori aplikacije usvoje potrebne sigurnosne mjere, značajno smanjujući potencijalnu površinu napada.
Istraživanje sigurnosti Express.js aplikacija bez kacige
Dok je poslužitelj pokrenut, pregledajte zaglavlja aplikacije. Samo naprijed i postavljati HTTP zahtjeve prema API-ju pomoću Postmana ili bilo koji drugi klijent koji prikazuje zaglavlja odgovora. Većina preglednika uključuje skup razvojnih alata koji će vam to omogućiti.
Kada šaljete zahtjeve matičnoj krajnjoj točki, trebali biste vidjeti slične rezultate u Zaglavlja dio odgovora unutar Poštara.
Primijetite X-Powered-By Zaglavlje. Obično pozadinske tehnologije koriste ovo zaglavlje za označavanje okvira ili drugog softvera koji pokreće web aplikaciju. Obično biste trebali ukloniti X-Powered-By zaglavlje u proizvodnom okruženju.
Na taj ćete način spriječiti potencijalne napadače u dobivanju vrijednih informacija koje bi mogli upotrijebiti za iskorištavanje poznatih ranjivosti povezanih s vašim tehnološkim nizom.
Testirajte sigurnosnu konfiguraciju poslužitelja Express.js
Za procjenu sigurnosnog statusa vaših aplikacija koristit ćemo se Sigurnosna zaglavlja online alat. Ova je aplikacija posebno dizajnirana za procjenu sigurnosne konfiguracije HTTP zaglavlja za aplikacije na strani klijenta, kao i za aplikacije na strani poslužitelja.
Najprije morate učiniti svoj lokalni Express.js poslužitelj dostupnim putem Interneta. Dva su moguća pristupa da se to postigne: postavljanje vaše Express.js aplikacije na poslužitelj u oblaku ili korištenje ngroka.
Da biste ga koristili, preuzmi ngrok zip datoteku, izdvojite izvršnu datoteku i pokrenite aplikaciju. Zatim pokrenite sljedeću naredbu da ugostite svoj lokalni Express.js poslužitelj s ngrok.
ngrok http 5000
ngrok će ispisati neke kratke informacije koje izgledaju ovako:
Kopirajte dostavljeno URL za prosljeđivanje i zalijepite ga u Sigurnosna zaglavlja' okvir za unos i kliknite na Skenirati dugme.
Nakon dovršetka sigurnosne procjene trebali biste primiti slično izvješće.
Na temelju izvješća vidljivo je da je poslužitelj Express.js dobio lošu ocjenu F razred. Ova niska ocjena rezultat je nepostojanja bitnih HTTP sigurnosnih zaglavlja u konfiguraciji poslužitelja—njihova odsutnost čini poslužitelj ranjivim na potencijalne sigurnosne rizike.
Integrirajte Helmet u Express.js aplikaciju
Sada samo naprijed i integrirajte Helmet u svoju Express.js aplikaciju. Pokrenite naredbu u nastavku da biste instalirali ovisnost.
npm instalirati kacigu
Ažurirajte datoteku server.js i uvezite Helmet.
konst kaciga = zahtijevati("kaciga")
Sada dodajte Helmet svojoj Express.js aplikaciji.
app.use (kaciga())
Na kraju, zavrtite razvojni poslužitelj, kopirajte vezu za prosljeđivanje s njega ngrokov terminal i zalijepite ga u Sigurnosna zaglavlja polje za unos za ponovno skeniranje lokalnog poslužitelja. Nakon što ponovno skeniranje završi, trebali biste vidjeti rezultate slične ovim:
Nakon integracije Helmeta, Express.js uključuje nekoliko bitnih sigurnosnih zaglavlja u HTTP odgovoru. Ovo značajno poboljšanje uzrokovalo je prijelaz aplikacije Express.js na A razred.
Iako Helmet nije savršeno rješenje, značajno poboljšava ukupnu sigurnost vaše Express.js aplikacije.
2. Zaštita Express.js aplikacija pomoću Joi, knjižnice za provjeru valjanosti unosa
Joi je knjižnica za provjeru valjanosti unosa koja pomaže zaštititi Express.js aplikacije pružajući prikladan način za provjeru valjanosti i dezinfekciju korisničkog unosa. Definiranjem shema provjere valjanosti korištenjem Joi-ja možete odrediti očekivanu strukturu, tipove podataka i ograničenja za dolazne podatke.
Joi provjerava valjanost unosa prema definiranoj shemi, osiguravajući da ispunjava navedene kriterije. To pomaže u sprječavanju uobičajenih sigurnosnih propusta kao što su ubacivanje podataka, skriptiranje na različitim mjestima (XSS) i drugi napadi manipulacije podacima.
Slijedite ove korake kako biste Joi integrirali u svoju aplikaciju.
- Instalirajte Joi.
npm instalirajte joi
- Uvezite Joi u svoju server.js datoteku.
konst Joi = zahtijevati('joi');
- Napravite Joi shemu provjere valjanosti podataka koja definira očekivanu strukturu i sva ograničenja za ulazne podatke.
konst shema = Joi.object({
email: Joi.string().email().required(),
lozinka: Joi.string().min(5).max(16).potreban()
}); - Potvrdite sve dolazne podatke pomoću definirane sheme.
konst { pogreška, vrijednost } = schema.validate (req.body);
ako (pogreška) {
// Rješavanje pogreške provjere valjanosti
// Na primjer, vrati odgovor o pogrešci
povratak res.status(400).json({ greška: detalji o grešci[0].poruka });
}
Implementacijom ovih koraka možete iskoristiti Joijeve mogućnosti provjere valjanosti unosa kako biste osigurali svoje Express.js aplikacije. To će osigurati da dolazni podaci zadovoljavaju definirana ograničenja, sprječavajući potencijalne sigurnosne prijetnje manipulacije podacima.
3. Zaštita Express.js aplikacija pomoću CORS mehanizma
Cross-Origin Resource Sharing (CORS) mehanizam je koji web poslužitelji koriste za upravljanje izvorima—klijentima ili drugim aplikacijama na strani poslužitelja—mogu pristupiti svojim zaštićenim resursima. Ovaj mehanizam pomaže u zaštiti od neovlaštenih zahtjeva s drugog izvora, sprječavajući probleme kao što su napadi skriptiranjem na različitim mjestima (XSS).
Da biste osigurali Express.js aplikacije pomoću CORS-a, slijedite ove korake:
- Instalirajte CORS paket.
npm instalirati cors
- Zahtijevati i koristiti međuprogram CORS u datoteci server.js.
konst cors = zahtijevati('cors');
app.use (cors());
Integracijom srednjeg softvera CORS u svoju Express.js aplikaciju, omogućujete dijeljenje resursa s različitim izvorima. To osigurava da ublažite potencijalne sigurnosne rizike povezane sa zahtjevima iz drugog izvora.
Osiguravanje aplikacija na strani poslužitelja s lakoćom
Možete upotrijebiti jednu ili više ovih bitnih mjera za poboljšanje sigurnosti svojih Express.js aplikacija.
Iako postoje mnoge mjere i pristupi dostupni za zaštitu vaših aplikacija na strani poslužitelja, ključni zaključak je da biste trebali dati prioritet sigurnosti tijekom cijelog životnog ciklusa razvoja. Ovo je zadatak koji počinje u fazi projektiranja i trebao bi se nastaviti sve do implementacije.