वे Security Bugs जिन्हें Node.js Developers Production में भेज देते हैं

पिछले साल मैंने एक स्टार्टअप के कोड की समीक्षा की थी। कोड साफ-सुथरा लग रहा था। टेस्ट भी पास हो गए थे।

फिर मैंने यह लाइन देखी: const query = \SELECT * FROM users WHERE email = '${req.body.email}'``

यह एक SQL injection बग है। स्टार्टअप ने इसे 8 महीनों तक प्रोडक्शन में चलाया। किसी भी डेवलपर या CTO ने इसे नहीं पकड़ा।

ये बग अदृश्य होते हैं क्योंकि कोड काम करता है। यह तब तक काम करता है जब तक कोई यूजर इनपुट फील्ड में कोई दुर्भावनापूर्ण (malicious) कमांड टाइप नहीं करता।

इन 5 सामान्य गलतियों को रोकें:

  1. यूजर इनपुट के साथ 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])
  1. Git में secrets लीक करना डेवलपर्स अक्सर रिपॉजिटरीज़ में .env फाइलें कमिट कर देते हैं। इससे आपके डेटाबेस URLs और API keys उजागर हो जाते हैं। हमेशा अपनी .gitignore फाइल में .env जोड़ें।

  2. jwt.verify के बजाय jwt.decode का उपयोग करना jwt.decode केवल टोकन को पढ़ता है। यह यह जांच नहीं करता कि टोकन असली है या नहीं। कोई भी डिकोड किए गए टोकन की नकल (forge) कर सकता है।

  • बुरा: const user = jwt.decode(token)
  • अच्छा: हमेशा सिग्नेचर को वेरीफाई करें। const user = jwt.verify(token, process.env.JWT_SECRET)
  1. Auth endpoints पर rate limiting की कमी Rate limiting के बिना, हमलावर brute force के जरिए लाखों पासवर्ड आज़मा सकते हैं। लॉगिन प्रयासों को सीमित करने के लिए किसी लाइब्रेरी का उपयोग करें।
  • अच्छा: हर 15 मिनट में 10 प्रयासों की सीमा जोड़ें।
  1. विस्तृत (Verbose) एरर मैसेज क्लाइंट को रॉ एरर मैसेज भेजने से हमलावरों को आपके सिस्टम का मैप बनाने में मदद मिलती है। वे आपके टेबल के नाम और डेटाबेस के प्रकार देख पाते हैं।
  • बुरा: res.status(500).json({ error: error.message })
  • अच्छा: एरर को इंटरनल रूप से लॉग करें। यूजर को एक सामान्य (generic) मैसेज भेजें। res.status(500).json({ error: 'Something went wrong' })

किसी भी एंडपॉइंट को शिप करने से पहले, एक सवाल पूछें: क्या होगा यदि कोई यूजर अप्रत्याशित (unexpected) डेटा भेजता है?

Security bugs शायद ही कभी जटिल होते हैं। वे तब होते हैं जब आप बुरे इरादे वाले लोगों (bad actors) के बारे में सोचना भूल जाते हैं।

आपने प्रोडक्शन में कौन सा security bug पाया है?

स्रोत: https://dev.to/manolito99/the-security-bug-every-nodejs-developer-ships-to-production-49e6