परिचय: जावास्क्रिप्ट अनुप्रयोग सुरक्षा एक विकल्प नहीं, बल्कि एक आवश्यकता क्यों है
\nजावास्क्रिप्ट (विशेषकर Node.js प्लेटफॉर्म पर) क्लाइंट और सर्वर दोनों तरह के अनुप्रयोग बनाने के लिए एक प्रमुख भाषा बन गई है। हालांकि, बढ़ती लोकप्रियता के साथ हमलों की संख्या भी बढ़ रही है। OWASP के अनुसार, अधिकांश सेंधमारी सामान्य त्रुटियों के कारण होती हैं जिन्हें रोका जा सकता है। इस लेख में हम कोड के वास्तविक उदाहरणों और सुरक्षा विधियों के साथ शीर्ष 10 जावास्क्रिप्ट (Node.js) कमजोरियों का विश्लेषण करेंगे। यह सामग्री शुरुआती और अनुभवी डेवलपर्स दोनों के लिए उपयोगी होगी जो अपनी परियोजनाओं की सुरक्षा को मजबूत करना चाहते हैं।
\n\n1. इंजेक्शन (SQL, NoSQL, Command Injection)
\nइंजेक्शन कमजोरियों की सबसे खतरनाक श्रेणी बनी हुई है। Node.js में, MongoDB और PostgreSQL अक्सर प्रभावित होते हैं।
\n\nकमजोर कोड का उदाहरण (NoSQL-इंजेक्शन):
\n// कमजोर कोड\napp.post('/login', async (req, res) => {\n const { username, password } = req.body;\n const user = await db.collection('users').findOne({\n username: username,\n password: password\n });\n // यदि { "username": { "$ne": null }, "password": { "$ne": null } } भेजा जाए, तो पहला उपयोगकर्ता वापस आएगा\n});\n\nकैसे ठीक करें:
\n- \n
- पैरामीटराइजेशन के साथ ORM/ODM (Mongoose, Sequelize) का उपयोग करें। \n
- इनपुट डेटा को मान्य और स्वच्छ करें (लाइब्रेरी
validatorयाjoi). \n - कमांड के लिए
execके बजायexecFileका उपयोग करें। \n
2. क्रॉस-साइट स्क्रिप्टिंग (XSS)
\nXSS हमलावर को उस पेज में एक दुर्भावनापूर्ण स्क्रिप्ट डालने की अनुमति देता है जिसे अन्य उपयोगकर्ता देख रहे हैं।
\n\nकमजोर कोड का उदाहरण (Reflected XSS):
\n// कमजोर Express-रूट\napp.get('/search', (req, res) => {\n const query = req.query.q;\n res.send(`<h1>खोज परिणाम: ${query}</h1>`);\n // यदि ?q=<script>alert('XSS')</script> भेजा जाए, तो स्क्रिप्ट निष्पादित होगी\n});\n\nसुरक्षा:
\n- \n
- आउटपुट को एस्केप करें: टेम्पलेट इंजन (EJS, Pug) के साथ
res.renderयाencodeURIComponentका उपयोग करें। \n - HTTP हेडर
Content-Security-Policyसेट करें। \n - क्लाइंट पर
innerHTMLका उपयोग न करें —textContentलागू करें। \n
3. असुरक्षित प्रमाणीकरण और सत्र प्रबंधन
\nकमजोर प्रमाणीकरण डेटा लीक के प्रमुख कारणों में से एक है। अक्सर डेवलपर्स कुंजियों को हार्डकोड करते हैं या कमजोर पासवर्ड का उपयोग करते हैं।
\n\nसामान्य त्रुटियाँ:
\n- \n
- पासवर्ड को सादे टेक्स्ट में संग्रहीत करना (bcrypt/argon2 के बजाय)। \n
- अनुमानित JWT-सीक्रेट का उपयोग करना (
secret123). \n - लॉगिन प्रयासों की संख्या पर सीमा का अभाव। \n
सही कार्यान्वयन का उदाहरण:
\nconst bcrypt = require('bcrypt');\nconst saltRounds = 12;\n\napp.post('/register', async (req, res) => {\n const hash = await bcrypt.hash(req.body.password, saltRounds);\n // हैश को डेटाबेस में सहेजें\n});\n\napp.post('/login', async (req, res) => {\n const user = await db.getUser(req.body.username);\n const match = await bcrypt.compare(req.body.password, user.passwordHash);\n if (match) {\n // कम समय सीमा के साथ JWT बनाएँ\n const token = jwt.sign({ id: user.id }, process.env.JWT_SECRET, { expiresIn: '15m' });\n res.json({ token });\n }\n});\n\n4. SSRF (Server-Side Request Forgery)
\nSSRF कमजोरी हमलावर को सर्वर को आंतरिक संसाधनों (जैसे, क्लाउड प्रदाता के मेटाडेटा) के लिए अनुरोध करने के लिए मजबूर करने की अनुमति देती है।
\n\nउदाहरण:
\n// कमजोर कोड: URL से अवतार लोड करना\napp.post('/avatar', async (req, res) => {\n const { url } = req.body;\n const response = await fetch(url); // http://169.254.169.254/latest/meta-data/ भेजा जा सकता है\n // प्रतिक्रिया की प्रक्रिया\n});\n\nसुरक्षा:
\n- \n
- अनुमत डोमेन की एक श्वेत सूची बनाएँ। \n
- ब्लॉक