Node.js डेव्हलपर्स प्रोडक्शनमध्ये पाठवणारे सुरक्षा दोष (Security Bugs)
मी गेल्या वर्षी एका स्टार्टअपसाठी कोड रिव्ह्यू केला. कोड स्वच्छ दिसत होता. सर्व टेस्ट्स पास झाल्या होत्या.
मग मला ही ओळ दिसली:
const query = \SELECT * FROM users WHERE email = '${req.body.email}'``
हा एक SQL injection बग आहे. हे स्टार्टअप ८ महिने प्रोडक्शनमध्ये हे वापरत होते. कोणताही डेव्हलपर किंवा CTO याकडे लक्ष देऊ शकला नाही.
हे बग्स अदृश्य असतात कारण कोड व्यवस्थित काम करतो. जोपर्यंत एखादा युजर इनपुट फील्डमध्ये एखादी घातक कमांड (malicious command) टाईप करत नाही, तोपर्यंत सर्व काही सुरळीत चालते.
या ५ सामान्य चुका करणे थांबवा:
- युजर इनपुटसह Raw SQL क्वेरीजसाठी template literals वापरू नका. यामुळे अटॅकर्सना तुमच्या डेटाबेसमध्ये प्रवेश मिळू शकतो.
- वाईट:
const query = \SELECT * FROM users WHERE email = '${email}'`` - चांगले: parameterized queries वापरा.
const query = 'SELECT * FROM users WHERE email = $1'db.query(query, [email])
Git मध्ये सीक्रेट्स लीक करणे डेव्हलपर्स अनेकदा रिपॉझिटरीजमध्ये .env फाइल्स कमिट करतात. यामुळे तुमचे डेटाबेस URLs आणि API keys उघड होऊ शकतात. नेहमी तुमच्या .gitignore फाईलमध्ये .env समाविष्ट करा.
jwt.verify ऐवजी jwt.decode वापरणे jwt.decode फक्त टोकन वाचते. ते टोकन खरे आहे की नाही हे तपासत नाही. कोणीही डिकोड केलेले टोकन बनावट (forge) तयार करू शकते.
- वाईट:
const user = jwt.decode(token) - चांगले: नेहमी सिग्नेचर व्हेरिफाय करा.
const user = jwt.verify(token, process.env.JWT_SECRET)
- auth endpoints वर rate limiting नसणे rate limiting शिवाय, अटॅकर्स brute force द्वारे लाखो पासवर्ड्स ट्राय करू शकतात. लॉगिन प्रयत्न मर्यादित करण्यासाठी एखादी लायब्ररी वापरा.
- चांगले: दर १५ मिनिटांत १० प्रयत्नांची मर्यादा सेट करा.
- सविस्तर (Verbose) एरर मेसेजेस क्लायंटला थेट (raw) एरर मेसेजेस पाठवल्यामुळे अटॅकर्सना तुमचे सिस्टम मॅप करण्यास मदत होते. त्यांना तुमच्या टेबलची नावे आणि डेटाबेसचे प्रकार समजतात.
- वाईट:
res.status(500).json({ error: error.message }) - चांगले: एरर अंतर्गत (internally) लॉग करा. युजरला एक सामान्य (generic) मेसेज पाठवा.
res.status(500).json({ error: 'Something went wrong' })
एखादा endpoint शिप करण्यापूर्वी, स्वतःला एक प्रश्न विचारा: जर युजरने अनपेक्षित डेटा पाठवला तर काय होईल?
सुरक्षा दोष (Security bugs) क्वचितच क्लिष्ट असतात. जेव्हा तुम्ही वाईट हेतू असलेल्या व्यक्तींचा (bad actors) विचार करायला विसरता, तेव्हा ते घडतात.
तुम्हाला प्रोडक्शनमध्ये कोणता सुरक्षा दोष आढळला आहे?
Source: https://dev.to/manolito99/the-security-bug-every-nodejs-developer-ships-to-production-49e6
