Biz hujum ostidamiz! 23+ Node.js xavfsizlikning eng yaxshi usullari

Biz hujum ostidamiz! 23+ Node.js xavfsizlikning eng yaxshi usullari

Yoni Goldberg, Kayl Martin va Bruno Shofler tomonidan to'plangan, boshqarilgan va yozilgan

Tech sharhlovchi: Liran Tal (Node.js Security Work Group)

Node.js havfsizligi bo'yicha eng yaxshi amaliyotlarning to'liq ro'yxatiga xush kelibsiz, bu eng yaxshi maqola va blog xabarlarini sarhisob qiladi

Boshlashdan oldin ozgina so'zlar

Xavfsizlik sahnaning oldida turgan paytda veb-xurujlar shu kunlarda portlashi mumkin. Biz dunyoning eng yaxshi maqola ostidagi barcha maqolalardan 23 ta Node.js xavfsizlikning eng yaxshi usullarini (+40 boshqa umumiy xavfsizlik amaliyotlari) to'pladik. Bu ish bizning Node.jsning eng yaxshi tajribalari GitHub omborining bir qismidir, unda 80 dan ortiq Node.js amaliyotlari mavjud. Izoh: Ko'pgina mavzularda kod namunasi va boshqa foydali ma'lumotlarga ega bo'lgan mavzular bo'yicha batafsil ma'lumot olish uchun havolalar mavjud.

Twitter tasmamiz orqali haftalik eng yaxshi tajribalarni oling

1. Tarmoq havfsizligi qoidalari

TL; DR: Xavfsizlik bilan bog'liq bo'lgan plaginlardan foydalaning, masalan eslint-plagin-xavfsizlik kabi xavfsizlikning zaifliklari va muammolarini imkon qadar erta aniqlash uchun - ular kodlanayotganda. Bu baholashdan foydalanish, bola jarayonini chaqirish yoki modulni so'zsiz tom ma'noda kiritish (masalan, foydalanuvchi kiritish) kabi xavfsizlik kamchiliklarini aniqlashda yordam beradi. Xavfsizlik satriga tushadigan kod namunalarini ko'rish uchun quyidagi "Batafsil o'qish" ni bosing

Aks holda: ishlab chiqarishdagi asosiy muammoga aylanish jarayonida xavfsizlikning bevosita zaifligi bo'lishi mumkin edi. Shuningdek, loyiha xavfsizlikning izchillik bilan ta'minlangan amaliyotiga, zaifliklar kiritilishiga yoki uzoq omborlarga qo'yilgan maxfiy sirlarga olib kelmasligi mumkin.

Ko'proq o'qing: Chiroqni ishlatish qoidalari

Linting bo'sh joy, nuqta-vergul yoki baholash bayonotlariga oid pedantik qoidalarni qo'llash uchun shunchaki vosita bo'lishi shart emas. ESLint sizning kodingizdagi turli xil xavfli naqshlarni (muntazam iboralar, kiritishni tekshirish va hk) yo'q qilish uchun kuchli asosni ta'minlaydi. Menimcha, bu xavfsizlikni yaxshi biladigan JavaScript-ni ishlab chiquvchilar tomonidan ko'rib chiqilishi kerak bo'lgan kuchli yangi vositani taqdim etadi. (Adam Bolduin)
Qo'shimcha tirnoq va kod namunalari bu erda

2. O'rta dasturdan foydalanib, parallel ravishda so'rovlarni cheklash

TL; DR: DOS hujumlari juda mashhur va ularni o'tkazish oson. Bulutli yukni muvozanatlashtiruvchi vositalar, bulutli xavfsizlik devori, nginx, stavkali-moslashuvchan paket yoki (kichik va unchalik muhim bo'lmagan dasturlar uchun) tashqi vositalardan foydalangan holda (masalan, ekspress-tezlik-chegarasi) stavkalarni cheklash.

Aks holda: haqiqiy foydalanuvchilar buzilgan yoki foydalana olmaydigan xizmatni oladigan xizmat rad etilishiga olib keladigan dasturga hujum qilinishi mumkin.

Batafsil: Narxlarni cheklashni joriy qiling

3. Konfiguratsiya fayllaridan sirlarni chiqarib oling yoki ularni shifrlash uchun paketlardan foydalaning

TL; DR: Hech qachon oddiy matn sirlarini konfiguratsiya fayllarida yoki dastlabki kodlarda saqlamang. Buning o'rniga Vault mahsulotlari, Kubernetes / Docker sirlari yoki atrof-muhit o'zgaruvchisi kabi maxfiy boshqaruv tizimlaridan foydalaning. Natijada, manba boshqaruvida saqlanadigan sirlar shifrlanishi va boshqarilishi kerak (kalitlar tugash muddati, audit va hk). Tasodifan sir tutilishining oldini olish uchun oldinga surish / surish kancalaridan foydalaning

Aks holda: manba nazorati, hattoki xususiy omborxonalarda ham xato yo'l bilan ommaviy e'lon qilinishi mumkin, bunda barcha sirlar fosh qilinadi. Tashqi tomon uchun manba boshqaruviga kirish bexosdan tegishli tizimlarga (ma'lumotlar bazalari, apislar, xizmatlar va boshqalar) kirish huquqini ta'minlaydi.

Batafsil: maxfiy boshqaruv

4. ORM / ODM kutubxonalarida so'rovlar in'ektsiyasining zaifliklarini oldini oling

TL; DR: SQL / NoSQL in'ektsiyasi va boshqa zararli hujumlarning oldini olish uchun har doim ma'lumotlardan qochadigan yoki nomlangan yoki indekslangan parametrlashtirilgan so'rovlarni qo'llab-quvvatlaydigan ORM / ODM yoki ma'lumotlar bazasi kutubxonasidan foydalaning va kutilayotgan turlar uchun foydalanuvchi kiritilishini tekshirishga ahamiyat bering. Hech qachon JavaScript so'rovlari satrlari yoki satrlarni bog'lashdan foydalanmang, chunki bu sizning so'rovlaringizni turli xil zaifliklarga ochadi. Node.js-ning barcha nufuzli ma'lumotlarga kirish kutubxonalari (masalan, Sequelize, Knex, mongoose) o'rnatilgan himoya himoyasiga ega.

Aks holda: tasdiqlanmagan yoki tekshirilmagan foydalanuvchi kiritishi NoSQL uchun MongoDB bilan ishlayotganda operatorning in'ektsiyasiga olib kelishi mumkin, va tegishli sanitariya tizimidan yoki ORM yordamida SQL in'ektsiyalariga osonlikcha ulkan zaiflik yaratadi.

Ko'proq o'qing: ORM / ODM kutubxonalaridan foydalangan holda so'rovlarni in'ektsiyasini oldini olish

sa'y-harakatlarini baholaysizmi? Iltimos, bizning loyihamizni GitHub-da ko'rsating

5. Jarayon avj oladigan vaqtni aniq belgilab DOS hujumlaridan saqlaning

TL; DR: Node jarayoni xatolarga yo'l qo'yilmasa qulab tushadi. Ko'pgina eng yaxshi tajribalar, hatto xato kelib chiqqandan keyin hal qilingan bo'lsa ham, chiqishni tavsiya qiladi. Masalan, Express har qanday asenkron xatoga yo'l qo'yadi - marshrutlarni ta'qib qilish bilan bog'lamang. Bu buzg'unchilar uchun juda yoqimli hujum joyini ochadi va bu jarayon buzilishini keltirib chiqaradi va bir necha marotaba bir xil so'rovni yuboradi. Bunga zudlik bilan chora ko'rilmaydi, ammo bir nechta texnik vositalar og'riqni engillashtirishi mumkin: Jarayon har doim tekshirilmagan xato tufayli qulab tushganda, jiddiy tanqidiy ogohlantirish, kirishni tasdiqlash va foydalanuvchi tomonidan noto'g'ri kiritilganligi sababli jarayonni buzmaslik, barcha marshrutlarni tutib olish va o'rash. Agar so'rovda xato yuzaga kelsa, uni buzmaslik haqida o'ylab ko'ring (global miqyosda nima sodir bo'ladi?

Aks holda: bu shunchaki ma'lumotli taxmin: Node.js-ning ko'plab dasturlari, agar bo'sh JSON tanasini barcha POST talablariga topshirishga harakat qilsak - bir nechta hovuch dasturlar ishdan chiqadi. Shu nuqtada, biz shunchaki murojaatlarni osonlikcha o'chirib tashlash uchun yuborishni takrorlashimiz mumkin

6. Kengaytirilgan xavfsizlik uchun HTTP javob sarlavhalarini sozlang

TL; DR: Sizning dasturingiz xujumchilar tomonidan saytlar ichidagi skript (XSS), kliklash va boshqa zararli xujumlar kabi oddiy xujumlardan foydalanishni oldini olish uchun xavfsiz sarlavhalardan foydalanishi kerak. Ular dubulg'a kabi modullar yordamida osongina sozlanishi.

Aks holda: tajovuzkorlar sizning ilovangiz foydalanuvchilariga to'g'ridan-to'g'ri hujumlarni amalga oshirishi mumkin, bu esa xavfsizlikning katta zaifliklariga olib keladi

Ko'proq o'qing: Ilovangizda xavfsiz sarlavhalardan foydalanish

7. Zaif bog'liqliklarni doimiy va avtomatik ravishda tekshiring

TL; DR: Npm ekotizimida loyihaga bog'liq bo'lgan holatlar ko'p uchraydi. Yangi zaifliklar topilganligi sababli, qaramlik har doim tekshirilib turilishi kerak. Zaif qaramlikni kuzatish, kuzatish va tuzatish uchun npm audit, nsp yoki snyk kabi vositalardan foydalaning. Ushbu vositalarni o'zingizning CI sozlashingiz bilan integratsiya qiling, shunda uni ishlab chiqarishdan oldin zaif qaramlikka duch kelasiz.

Aks holda: tajovuzkor veb-ramkangizni aniqlab, uning barcha zaifliklariga hujum qilishi mumkin.

Batafsil: qaramlik xavfsizligi

8. Parollar bilan ishlashda Node.js kripto kutubxonasidan foydalanishdan saqlaning, Bcrypt-dan foydalaning

TL; DR: Parollar yoki sirlar (API kalitlari) bcrypt kabi xavfsiz hash + tuz funktsiyasi yordamida saqlanishi kerak, bu ishlash va xavfsizlik nuqtai nazaridan JavaScript-ni amalga oshirishda afzalroq tanlov bo'lishi kerak.

Aks holda: xavfsiz funktsiyani ishlatmasdan saqlanadigan parollar yoki sirlar, oxir-oqibat ularni oshkor qilishga olib keladigan shafqatsiz majburlash va lug'at hujumlariga qarshi himoyasizdir.

Batafsil: Bcrypt-dan foydalaning

9. HTML, JS va CSS chiqishlaridan qoching

TL; DR: Brauzerga yuborilgan ishonchsiz ma'lumotlar shunchaki namoyish qilish o'rniga bajarilishi mumkin, bu odatda saytlararo skript (XSS) hujumi deb ataladi. Maxsus kutubxonalar yordamida ma'lumotni hech qachon bajarilmasligi kerak bo'lgan toza tarkib sifatida belgilang (masalan, kodlash, qochish).

Aks holda: buzg'unchi zararli JavaScript kodini DB-da saqlashi mumkin, keyinchalik u yomon mijozlarga yuboriladi

Ko'proq o'qing: Qochish natijasi

10. Kiruvchi JSON sxemalarini tekshiring

TL; DR: Kiruvchi so'rovlarning asosiy yukini tekshiring va talablarga javob berishini ta'minlang, agar u bajarilmasa, tezda bajaring. Har bir marshrutda tekshirishning zerikarli kodlanishiga yo'l qo'ymaslik uchun siz engil JSON-ga asoslangan tasdiqlash sxemalaridan foydalanishingiz mumkin, masalan jsonschema yoki joi

Aks holda: sizning saxiyligingiz va ruxsat etilgan yondashuvingiz hujumlar yuzasini sezilarli darajada oshiradi va buzg'unchilar dasturni buzadigan biron bir kombinatsiyani topmaguncha ko'plab kirishlarni sinab ko'rishga undashadi

Batafsil: Kiruvchi JSON sxemalarini tekshiring

11. JWT tokenlarini qora ro'yxatga olishni qo'llab-quvvatlang

TL; DR: JWT tokenlaridan foydalanganda (masalan, Passport.js bilan), sukut bo'yicha berilgan tokenlardan kirishni bekor qilish mexanizmi mavjud emas. Foydalanuvchi tomonidan zararli harakatlarni aniqlaganingizdan so'ng, ular tizimga kirish huquqini saqlagan holda, tizimga kirishni to'xtatishning imkoni yo'q. Buni har bir so'rovda tasdiqlangan ishonchsiz tokenlarning qora ro'yxatini amalga oshirish orqali kamaytiring.

Aks holda: muddati o'tgan yoki noto'g'ri joylashtirilgan tokenlar uchinchi tomon tomonidan dasturga kirish va tokenning egasini nomidan ishg'ol qilish uchun yomon maqsadlarda ishlatilishi mumkin.

Batafsil: Qora ro'yxatdagi JWTlar

12. Avtorizatsiyaga qarshi shafqatsiz hujumlarning oldini oling

TL; DR: Oddiy va kuchli usul bu ikkita o'lchov yordamida avtorizatsiya qilish urinishlarini cheklashdir:

  1. Birinchisi, bitta foydalanuvchi / ID va IP-manzilning ketma-ket muvaffaqiyatsiz urinishlari soni.
  2. Ikkinchisi uzoq vaqt davomida IP manzilidan qilingan muvaffaqiyatsiz urinishlar soni. Masalan, agar bir kunda 100 ta muvaffaqiyatsiz urinish qilsa, IP-manzilni to'sib qo'ying.

Aks holda: tajovuzkor dasturda imtiyozli hisoblarga kirish uchun cheklanmagan avtomatlashtirilgan parolni berishga urinishi mumkin

Batafsil: Kirish tezligini cheklash

13. Node.js-ni root bo'lmagan foydalanuvchi sifatida ishga tushiring

TL; DR: Node.js cheklanmagan ruxsatlarga ega root foydalanuvchi sifatida ishlaydigan umumiy stsenariy mavjud. Masalan, bu Docker konteynerlarida odatiy xatti-harakatlar. Ildiz bo'lmagan foydalanuvchi yaratib, uni Docker rasmiga yopishtirish tavsiya etiladi (quyida keltirilgan misollar) yoki "-u username" bayrog'i bilan konteynerni chaqirib jarayonni ushbu foydalanuvchilar nomidan amalga oshirish tavsiya etiladi.

Aks holda: serverda skriptni boshqarishni amalga oshirgan tajovuzkor mahalliy mashina ustidan cheksiz quvvat oladi (masalan, serverga kirish va qaytish trafigini o'zgartirish)

Batafsil: Node.js-ni root bo'lmagan foydalanuvchi sifatida ishga tushiring

14. Orqaga proksi-server yoki o'rta dasturdan foydalangan holda ish haqi hajmini cheklang

TL; DR: tananing yuklamasi qanchalik katta bo'lsa, bitta ipingiz uni qayta ishlashda qiyinlashadi. Bu tajovuzkorlar uchun juda ko'p miqdordagi so'rovlarsiz (DOS / DDOS hujumlari) serverlarni tizzalariga olib chiqish uchun imkoniyatdir. Ushbu cheklovni (masalan, xavfsizlik devori, ELB) cheklangan kirish hajmini cheklash yoki tez o'lchovlarni faqat kichik o'lchamdagi yuklarni qabul qilish uchun tezkor tahlil o'tkazuvchini sozlash orqali kamaytirish.

Aks holda: Sizning ilovangiz katta talablarga javob berishi kerak, u bajarishi kerak bo'lgan boshqa muhim ishlarni bajara olmaydi va natijada DOS hujumlariga ta'sir qiladi va zaiflashadi.

Ko'proq o'qing: yuk hajmi chegarasi

Twitter tasmamiz orqali haftalik eng yaxshi tajribalarni oling

15. JavaScript baholash bayonotlaridan saqlaning

TL; DR: baholash yomon, chunki u ishga tushirish paytida maxsus JavaScript kodini bajarishga imkon beradi. Bu nafaqat samaradorlik bilan bog'liq, balki foydalanuvchi kiritishi natijasida kelib chiqishi mumkin bo'lgan zararli JavaScript kodi tufayli ham muhim xavfsizlikdir. Bunga yo'l qo'ymaslik kerak bo'lgan yana bir xususiyat - bu yangi funktsiya konstruktoridir. setTimeout va setInterval-ga hech qachon dinamik JavaScript kodi o'tkazilmasligi kerak.

Aks holda: zararli JavaScript kodi matnga yoki boshqa real vaqtda JavaScript til funktsiyalarini baholaydigan matnga yo'l topadi va sahifadagi JavaScript-ga to'liq kirish huquqiga ega bo'ladi. Ushbu zaiflik ko'pincha XSS hujumi sifatida namoyon bo'ladi.

Ko'proq o'qing: Javoblarni baholash bayonotlaridan saqlaning

16. Yomon RegEx-ni bitta ipning bajarilishini haddan tashqari oshirib yubormang

TL; DR: Oddiy iboralar, qulay bo'lsa ham, JavaScript dasturlariga va ayniqsa Node.js platformasiga real xavf tug'diradi. Mos keladigan matnni kiritish uchun foydalanuvchi protsessor tsikllarining katta miqdorini qayta ishlashni talab qilishi mumkin. RegEx-ga ishlov berish samarasiz bo'lishi mumkin, chunki 10 ta so'zni tasdiqlaydigan bitta so'rov butun tsiklni 6 soniya davomida bloklab qo'yishi va protsessorni -ga o'rnatishi mumkin. Shu sababli, o'z Regex naqshlarini yozish o'rniga validator.js kabi uchinchi tomon tekshiruv paketlarini afzal ko'ring yoki himoyasiz regex naqshlarini aniqlash uchun xavfsiz rejimdan foydalaning.

Aks holda: yomon yozilgan regexeslar Doing Expression DoS hujumlariga moyil bo'lishi mumkin, bu esa hodisalar qatorini butunlay to'sib qo'yadi. Masalan, ommabop lahzalar to'plami 2017 yil noyabr oyida RegEx-dan zararli foydalanish bilan himoyasiz deb topildi

Batafsil: zararli RegEx-ni oldini oling

17. O'zgaruvchini ishlatib modulni yuklashdan saqlaning

TL; DR: foydalanuvchi kiritishidan kelib chiqishi mumkin bo'lgan tashvish tufayli parametr sifatida berilgan boshqa faylni talab / import qilishdan saqlaning. Ushbu qoida umuman fayllarga kirish uchun kengaytirilishi mumkin (ya'ni fs.readFile ()) yoki foydalanuvchi kiritishidan kelib chiqadigan dinamik parametrlarga ega boshqa sezgir manbalarga kirish uchun. Eslint-plagin bilan ishlaydigan xavfsizlik moslamasi bunday naqshlarni ko'rib chiqishi mumkin va erta ogohlantirishi mumkin

Aks holda: zararli foydalanuvchi kiritishi buzilgan fayllarni talab qilish uchun ishlatiladigan parametrga murojaat qilishi mumkin, masalan, fayl tizimiga ilgari yuklangan fayl yoki mavjud tizim fayllariga kirish.

Ko'proq o'qing: Xavfsiz modulni yuklash

18. Xavfsiz kodni sinov muhitida ishga tushiring

TL; DR: Ishlash vaqtida berilgan tashqi kodni (masalan, plagin) ishlatish vazifasi yuklanganda, plaginga qarshi asosiy kodni ajratib turadigan va saqlaydigan har qanday "sinov muhitida" ishlash muhitidan foydalaning. Bunga maxsus jarayon (masalan, cluster.fork ()), serversiz muhit yoki sinov muhitida ishlaydigan maxsus npm paketlar yordamida erishish mumkin.

Aks holda: plagin cheksiz pastadir, xotirani haddan tashqari yuklash va sezgir jarayon muhiti o'zgaruvchilariga kirish kabi cheksiz ko'p variantlar orqali hujum qilishi mumkin.

Batafsil: sinov muhitida xavfli kodni ishga tushirish

19. Bola jarayonlari bilan ishlashda ehtiyot bo'ling

TL; DR: iloji bo'lsa, bola jarayonlaridan saqlaning va agar kerak bo'lsa, qobiqni in'ektsiya xurujlarini yumshatish uchun kiritilgan ma'lumotlarni tasdiqlang va sanitariya qiling. Child_process.execFile-dan foydalanishni afzal ko'ring, ular atributlar to'plami bilan faqat bitta buyruqni bajaradi va qobiq parametrlarining kengayishiga yo'l qo'ymaydi.

Aks holda: bolalar jarayonlaridan noaniq foydalanish buyruqni masofadan turib bajarilishiga yoki foydalanuvchi nomaqbul tizim buyrug'iga berilgan zararli kirishi tufayli qobiqni kiritish hujumlariga olib kelishi mumkin.

Batafsil: Bola jarayonlari bilan ishlashda ehtiyot bo'ling

20. Xatolar tafsilotlarini mijozlardan yashirish

TL; DR: Birlashtirilgan ekspress xatolarni qayta ishlaydigan vosita sukut bo'yicha xato tafsilotlarini yashiradi. Shu bilan birga, shaxsiy xatolarni boshqarish mantiqini maxsus Xato ob'ektlari yordamida amalga oshirish imkoniyati juda katta (ko'pchilik buni eng yaxshi amaliyot deb hisoblaydi). Agar shunday qilsangiz, ba'zi bir xato dastur tafsilotlarini o'z ichiga olishi mumkin bo'lgan xato ob'ektini mijozga qaytarmasligingizga ishonch hosil qiling

Aks holda: amaliy fayl tafsilotlari, masalan, server fayllari yo'llari, foydalanilayotgan uchinchi tomon modullari va buzg'unchi tomonidan ishlatilishi mumkin bo'lgan boshqa ichki ish oqimlari, stack izidan topilgan ma'lumotlardan chiqib ketishi mumkin.

Ko'proq o'qing: xatolar tafsilotlarini mijozlardan yashirish

21. 2FA ni npm yoki ip uchun sozlang

TL; DR: Ishlab chiqish zanjiridagi har qanday qadam MFA (ko'p faktorli autentifikatsiya) bilan himoyalangan bo'lishi kerak, npm / ip - bu ba'zi bir ishlab chiquvchining paroliga qo'lini tekkizadigan tajovuzkorlar uchun yoqimli imkoniyatdir. Dastur ma'lumotlarini ishlatib, tajovuzkorlar zararli kodni loyihalar va xizmatlar orasida keng o'rnatilgan kutubxonalarga kiritishlari mumkin. Ehtimol, Internetda chop etilgan bo'lsa ham. Npm-da 2-faktorli autentifikatsiyani yoqish, tajovuzkorlar sizning paket kodingizni o'zgartirishlariga deyarli nol imkoniyat qoldiradi.

Aks holda: parolingizni o'g'irlangan eslint ishlab chiqaruvchisi haqida eshitganmisiz?

22. O'rta dastur sessiyasini sozlang

TL; DR: Har bir veb-ramka va texnologiyaning ma'lum kamchiliklari bor - tajovuzkorga biz foydalanadigan veb-ramka ular uchun katta yordam ekanligini aytadi. Sessiya o'rtoqliklari uchun standart sozlamalardan foydalanish X-Powered-By sarlavhasiga o'xshash tarzda dasturingizni modul va ramkaga oid o'g'rilik hujumlariga duchor qilishi mumkin. Texnologik qurilmangizni aniqlaydigan va ochadigan narsani yashirishga harakat qiling (masalan, Node.js, express)

Aks holda, cookie-fayllar xavfli ulanishlar orqali uzatilishi mumkin va tajovuzkor veb-ilovaning bazasini, shuningdek modulga tegishli zaifliklarni aniqlash uchun seansni identifikatsiyalash vositasidan foydalanishi mumkin.

Batafsil: Cookie fayllari va seans xavfsizligi

23. Jarayon avjiga chiqishini aniq belgilab DOS hujumlaridan saqlaning

TL; DR: Node jarayoni xatolarga yo'l qo'yilmasa qulab tushadi. Ko'pgina eng yaxshi tajribalar, hatto xato kelib chiqqandan keyin hal qilingan bo'lsa ham, chiqishni tavsiya qiladi. Masalan, Express har qanday asenkron xatoga yo'l qo'yadi - marshrutlarni ta'qib qilish bilan bog'lamang. Bu buzg'unchilar uchun juda yoqimli hujum joyini ochadi va bu jarayon buzilishini keltirib chiqaradi va bir necha marotaba bir xil so'rovni yuboradi. Bunda tezkor chora yo'q, ammo ba'zi usullar og'riqni engillashtirishi mumkin: Jarayon har doim tekshirilmagan xato tufayli qulab tushganda, jiddiy shikoyat bilan ogohlantiring, kirishni tasdiqlang va foydalanuvchi noto'g'ri kiritganligi sababli ishdan chiqmaslikka harakat qiling, barcha marshrutlarni qo'lga olish va o'rash bilan o'rab oling. Agar so'rovda xato yuzaga kelsa, uni buzmaslik haqida o'ylab ko'ring (global miqyosda nima sodir bo'ladi?)

Aks holda: bu shunchaki ma'lumotli taxmin: Node.js-ning ko'plab dasturlari, agar bo'sh JSON tanasini barcha POST talablariga topshirishga harakat qilsak - bir nechta hovuch dasturlar ishdan chiqadi. Shu nuqtada, biz shunchaki murojaatlarni osonlikcha o'chirib tashlash uchun yuborishni takrorlashimiz mumkin.

24. Xavfsiz yo'naltirishlarni oldini oling

TL; DR: foydalanuvchi kiritilishini tasdiqlamagan qayta yo'naltirishlar hujumchilarga firibgarlarni ishga tushirishga, foydalanuvchi ma'lumotlarini o'g'irlashga va boshqa zararli harakatlarni amalga oshirishga imkon beradi.

Aks holda: Agar buzg'unchi tashqi va foydalanuvchi tomonidan kiritilgan ma'lumotni tekshirmasligingizni aniqlasa, ular foydalanuvchilarning bosishi uchun forumlar, ijtimoiy tarmoqlar va boshqa jamoat joylarida maxsus ishlab chiqilgan havolalarni joylashtirish orqali ushbu zaiflikdan foydalanishlari mumkin.

Batafsil: Xavfsiz yo'naltirishlarni oldini oling

25. sirlarni npm registriga qo'yishdan saqlaning

TL; DR: Davlat npm registrlariga sirni tasodifan e'lon qilish xavfini oldini olish uchun ehtiyot choralarini ko'rish kerak. Muayyan fayl yoki papkalarni qora ro'yxatga olish uchun .npmignore faylidan foydalanish mumkin, yoki pack.json-dagi fayllar oq ro'yxat sifatida harakat qilishi mumkin.

Aks holda: Loyihangizning API kalitlari, parollari yoki boshqa sirlari, moliyaviy yo'qotishlar, boshqa shaxslarning xatti-harakatlariga olib kelishi mumkin bo'lgan har kim ularni suiiste'mol qilishi mumkin.

Batafsil: sirlarni nashr etishdan saqlaning

sa'y-harakatlarini baholaysizmi? Iltimos, bizning loyihamizni GitHub-da ko'rsating

26. 40 ta umumiy xavfsizlik bo'yicha tavsiyalar ro'yxati (aniqrog'i Node.js bilan bog'liq emas).

Quyidagi o'qlar har bir dasturda qo'llanilishi kerak bo'lgan taniqli va muhim xavfsizlik choralari hisoblanadi. Ular Node.js bilan mutlaqo bog'liq emas va dastur doirasidan qat'i nazar shunga o'xshash tarzda amalga oshirilganligi sababli - biz ularni bu erda ilova sifatida kiritamiz. Mahsulotlar OWASP tasnifi bo'yicha guruhlangan. Namuna quyidagi fikrlarni o'z ichiga oladi:

  • Ildiz hisobi uchun MFA / 2FA-ni talab qiling
  • Parollarni va kirish tugmachalarini, shu jumladan SSH tugmachalarini tez-tez aylantiring
  • Operatsiyalar uchun ham, foydalanuvchi ichidagi boshqaruv uchun ham parol siyosatini qo'llang, OWASP parollari tavsiyalariga qarang
  • Hech qanday standart hisob ma'lumotlarini etkazib bermang yoki tarqatmang, ayniqsa ma'mur foydalanuvchilariga
  • Faqat OAuth, OpenID va boshqalar kabi standart autentifikatsiya usullaridan foydalaning - asosiy autentifikatsiyadan qoching
  • Autentifikatsiya tezligini cheklash: Y daqiqada X-ga kirishga urinishlar (jumladan, parolni tiklash va hk) taqiqlang
  • Kirishda xatolik yuz berganida, foydalanuvchi nomi yoki parolni tekshirish muvaffaqiyatsiz tugaganmi yoki yo'qligini bilmasin, shunchaki umumiy avtoulov xatosini qaytaring
  • Bir ishchiga bir nechta hisobni (masalan, GitHub, AWS, Jenkins va boshqalarni) boshqarishning oldini olish va foydalanuvchi tomonidan boshqariladigan jangovor tizimdan foyda olish uchun foydalanuvchilarni markazlashtirilgan boshqarish tizimidan foydalanishni ko'rib chiqing.

40 ta umumiy xavfsizlik maslahatlarining to'liq ro'yxatini rasmiy Node.js-ning eng yaxshi amaliyotlar omborida topish mumkin!

Batafsil: 40 umumiy xavfsizlik bo'yicha maslahat

Boshqa yaxshi o'qishlar:

  • Node.js ishlab chiqarishning eng yaxshi amaliyoti - Yoni Goldberg
  • Node.js Xavfsizlik haqida umumiy ma'lumot - Gergeli Nemet
  • Xavfsizlik bo'yicha eng yaxshi amaliyotlar - Express rasmiy
  • YouTube: A Node.js havfsizlik yo'l xaritasi - Mayk Samuel

Mualliflar - biz haqimizda

  • Yoni Goldberg - AQSh, Evropa va Isroilda mijozlarga xizmat ko'rsatuvchi Node.js maslahatchisi
  • Kayl Martin - Yangi Zelandiyada joylashgan Full Stack dasturchisi
  • Bruno Scheufler - to'liq stack veb-dasturchisi va Node.js ixlosmandlari
sa'y-harakatlarini baholaysizmi? Pastki qismga urish (50 martagacha) bizning kunimizni o'tkazishi mumkin