Jei tik pradedate savo žiniatinklio kūrimo ar Node.js kelionę, galbūt nežinote, kaip svarbu apsaugoti programą.
„Express.js“ yra našus sprendimas kuriant pagrindines žiniatinklio programas, tačiau jam trūksta saugumo. Kai kuriate žiniatinklio programą, jums reikia tinkamų saugos priemonių, kad apsaugotumėte naudotojų duomenis.
Laimei, yra būdų, kuriais galite padidinti Express.js programų saugumą. Visi šie patarimai padės sustiprinti programų saugumą naudojant skirtingus metodus.
Nustatykite Express.js programą
Pradėkite nuo demonstracinės versijos nustatymo Express.js žiniatinklio serveris naudojant npm, mazgo paketų tvarkyklė. Vietoje sukurkite projekto aplanką ir pakeiskite katalogą į jį savo terminale.
mkdir greitasis projektas
cd express-projektas
Tada sukurkite a package.json failą šakniniame kataloge.
npm init -y
Eikite į priekį ir įdiekite Express.js.
npm install express
Galiausiai sukurkite a server.js failą projekto aplanko šakniniame kataloge ir pridėkite šį kodą, kad nustatytumėte pagrindinį žiniatinklio serverį.
konst išreikšti = reikalauti("išreikšti")
konst programa = express ()
konst PORT = process.env. UOSTAS || 5000app.get("/", (req, res) => {
res.json("Labas pasauli!")
})
app.listen (PORT, () => {
konsolė.log(`Paleidžiamas serveris http://localhost:${PORT}`)
})
Paleiskite serverį naudodami šią komandą:
mazgo serveris.js
Dabar esate pasirengę ištirti kai kurias priemones, kurias galite naudoti norėdami apsaugoti savo Express.js programą.
1. Express.js programų apsauga naudojant šalmą
Šalmas yra Node.js tarpinė programinė įranga, kuri padeda apsaugoti serverio programas nustatydama įvairias HTTP saugos antraštes. Šios antraštės suteikia esminius apsaugos mechanizmus nuo įprastos užpakalinės sistemos saugumo spragos, pvz., kelių svetainių scenarijų kūrimas (XSS), kelių svetainių užklausų klastojimas (CSRF) ir daugelis kitų.
Express.js pagal numatytuosius nustatymus nekonfigūruoja HTTP saugos antraščių, todėl gali atsirasti saugos trūkumas, dėl kurio gali būti atskleistos galimai jautrios antraštės. Naudodami šią informaciją kenkėjiški veikėjai gali gauti neteisėtą prieigą arba kitaip sutrikdyti jūsų programą.
Šalmas veikia kaip gyvybiškai svarbus skydas, užtikrinantis, kad programos HTTP atsakymai atitiktų būtinas saugos priemones ir žymiai sumažintų galimą atakos paviršių.
Tyrinėkite Express.js programų saugumą be šalmo
Kai serveris veikia, patikrinkite programos antraštes. Pirmyn ir pateikti HTTP užklausas API naudojant „Postman“. arba bet kuris kitas klientas, kuris rodo atsakymų antraštes. Daugumoje naršyklių yra kūrėjo įrankių rinkinys, leidžiantis tai padaryti.
Kai siunčiate užklausas į pagrindinį galinį tašką, turėtumėte stebėti panašius rezultatus Antraštės atsakymo skyriuje Paštininkas.
Atkreipkite dėmesį į X-Powered-By antraštę. Paprastai užpakalinės technologijos naudoja šią antraštę, kad nurodytų sistemą ar kitą programinę įrangą, kuri maitina žiniatinklio programą. Paprastai turėtumėte pašalinti X-Powered-By antraštę gamybos aplinkoje.
Taip neleisite potencialiems užpuolikams gauti vertingos informacijos, kurią jie galėtų panaudoti, kad išnaudotų žinomus su jūsų technologijų paketu susijusius pažeidžiamumus.
Išbandykite Express.js serverio saugos konfigūraciją
Norėdami įvertinti jūsų programų saugos būseną, naudosime Saugos antraštės internetinis įrankis. Ši programa yra specialiai sukurta įvertinti HTTP antraščių saugos konfigūraciją kliento ir serverio programose.
Pirmiausia turite padaryti vietinį Express.js serverį pasiekiamą internetu. Yra du galimi būdai tai pasiekti: įdiegti Express.js programą debesies serveryje arba naudoti ngrok.
Norėdami jį naudoti, parsisiųsti ngrok zip failą, išskleiskite vykdomąjį failą ir paleiskite programą. Tada paleiskite šią komandą, kad priglobtumėte vietinį Express.js serverį su ngrok.
ngrok http 5000
ngrok pateiks trumpą informaciją, kuri atrodo taip:
Nukopijuokite pateiktą persiuntimo URL ir įklijuokite jį į Saugos antraštės“ įvesties laukelį ir spustelėkite Nuskaityti mygtuką.
Kai saugumo įvertinimas bus baigtas, turėtumėte gauti panašią ataskaitą.
Remiantis ataskaita, akivaizdu, kad Express.js serveris gavo prastą F laipsnis. Šis žemas laipsnis atsirado dėl to, kad serverio konfigūracijoje nėra esminių HTTP saugos antraščių – jų nebuvimas serveris tampa pažeidžiamas galimų saugumo pavojų.
Integruokite šalmą į Express.js programą
Dabar eikite į priekį ir integruokite Helmet į savo Express.js programą. Vykdykite toliau pateiktą komandą, kad įdiegtumėte priklausomybę.
npm įdiegti šalmą
Atnaujinkite server.js failą ir importuokite šalmą.
konst šalmas = reikalauti("šalmas")
Dabar pridėkite šalmą prie savo Express.js programos.
app.use (helmet())
Galiausiai sukite kūrimo serverį, nukopijuokite persiuntimo nuorodą iš ngrok's terminalą ir įklijuokite jį į Saugumo antraštė įvesties lauką, kad iš naujo nuskaitytumėte vietinį serverį. Baigę pakartotinį nuskaitymą, turėtumėte matyti panašius rezultatus:
Integravus „Helmet“, „Express.js“ į HTTP atsakymą įtraukė keletą esminių saugos antraščių. Dėl šio esminio patobulinimo programa Express.js buvo perkelta į A laipsnis.
Nors Helmet nėra patikimas sprendimas, jis žymiai padidina bendrą Express.js programos saugumą.
2. Express.js programų apsauga naudojant Joi, įvesties patvirtinimo biblioteką
Joi yra įvesties tikrinimo biblioteka, padedanti apsaugoti Express.js programas, nes yra patogus būdas patvirtinti ir išvalyti vartotojo įvestį. Apibrėždami patvirtinimo schemas naudodami Joi, galite nurodyti numatomą gaunamų duomenų struktūrą, duomenų tipus ir apribojimus.
Joi patvirtina įvestį pagal apibrėžtą schemą ir užtikrina, kad ji atitinka nurodytus kriterijus. Tai padeda išvengti įprastų saugumo spragų, pvz., duomenų įterpimo, scenarijų tarp svetainių (XSS) ir kitų duomenų manipuliavimo atakų.
Norėdami integruoti Joi į savo programą, atlikite šiuos veiksmus.
- Įdiekite Joi.
npm įdiegti joi
- Importuokite Joi į server.js failą.
konst Joi = reikalauti('labai');
- Sukurkite Joi duomenų patvirtinimo schemą, kuri apibrėžia numatomą struktūrą ir visus įvesties duomenų apribojimus.
konst schema = Joi.object({
paštas: Joi.string().email().required(),
slaptažodis: Joi.string().min(5).max(16).required ()
}); - Patvirtinkite visus gaunamus duomenis naudodami apibrėžtą schemą.
konst { error, value } = schema.validate (req.body);
jeigu (klaida) {
// Tvarkyti patvirtinimo klaidą
// Pavyzdžiui, grąžinkite klaidos atsakymą
grąžinti res.status(400.json({ klaida: Klaidos detalės[0].pranešimas });
}
Įgyvendindami šiuos veiksmus, galite panaudoti Joi įvesties patvirtinimo galimybes, kad apsaugotumėte savo Express.js programas. Tai užtikrins, kad gaunami duomenys atitiks apibrėžtus apribojimus, užkertant kelią galimoms duomenų manipuliavimo saugumo grėsmėms.
3. Express.js programų apsauga naudojant CORS mechanizmą
Cross-Origin Resource Sharing (CORS) yra mechanizmas, kurį žiniatinklio serveriai naudoja norėdami valdyti, kurie šaltiniai – klientai ar kitos serverio pusės programos – gali pasiekti savo apsaugotus išteklius. Šis mechanizmas padeda apsisaugoti nuo neteisėtų įvairių šaltinių užklausų, užkertant kelią tokioms problemoms kaip scenarijų tarp svetainių (XSS) atakos.
Norėdami apsaugoti Express.js programas naudodami CORS, atlikite šiuos veiksmus:
- Įdiekite CORS paketą.
npm įdiegti kors
- Reikalauti ir naudoti CORS tarpinę programinę įrangą server.js faile.
konst cors = reikalauti("cors");
app.use (cors());
Integravę CORS tarpinę programinę įrangą į savo Express.js programą, įgalinate įvairių šaltinių išteklių bendrinimą. Tai užtikrina, kad sumažinsite galimą saugumo riziką, susijusią su kelių šaltinių užklausomis.
Lengvai apsaugokite serverio programas
Galite naudoti vieną ar kelias iš šių esminių priemonių, kad padidintumėte savo Express.js programų saugą.
Nors yra daug priemonių ir metodų, skirtų apsaugoti jūsų serverio programas, svarbiausia yra tai, kad pirmenybę turėtumėte teikti saugai per visą kūrimo ciklą. Tai užduotis, kuri prasideda projektavimo etape ir turėtų tęstis iki pat diegimo.