जावास्क्रिप्ट एप्लिकेशन सुरक्षा: शुरुआती लोगों के लिए शीर्ष 10 कमजोरियाँ
\n\nजावास्क्रिप्ट, विशेष रूप से Node.js वातावरण में विकास, आधुनिक वेब एप्लिकेशन बनाने के लिए व्यापक अवसर खोलता है। हालाँकि, शक्ति के साथ जिम्मेदारी भी आती है। सुरक्षा मुद्दों की अनदेखी करने से डेटा लीक, वित्तीय नुकसान और प्रतिष्ठा को नुकसान हो सकता है। शुरुआती डेवलपर्स के लिए, बुनियादी खतरों को समझना सुरक्षित कोड बनाने की दिशा में पहला कदम है। इस लेख में, हम OWASP सूची के आधार पर जावास्क्रिप्ट (Node.js) की शीर्ष 10 कमजोरियों को कोड उदाहरणों और सुरक्षा के व्यावहारिक सुझावों के साथ समझेंगे।
\n\n1. क्रॉस-साइट स्क्रिप्टिंग (XSS)
\nXSS सबसे आम हमलों में से एक है। हमलावर एक वेब पेज में दुर्भावनापूर्ण स्क्रिप्ट डालता है, जो पीड़ित के ब्राउज़र में निष्पादित होती है। Node.js में, यह अक्सर डेटा के अनएस्केप्ड आउटपुट के माध्यम से होता है।
\n\nकमजोर कोड का उदाहरण (Express):
\napp.get('/user/:name', (req, res) => {\n res.send('<h1>नमस्ते, ' + req.params.name + '</h1>');\n});\n\n\nसुरक्षा कैसे करें: ऑटो-एस्केपिंग वाले टेम्प्लेट इंजन (जैसे, Handlebars, EJS) या helmet जैसी लाइब्रेरी का उपयोग करें। कभी भी उपयोगकर्ता इनपुट को सीधे HTML में न डालें।
app.get('/user/:name', (req, res) => {\n const safeName = encodeURIComponent(req.params.name);\n res.send(`<h1>नमस्ते, ${safeName}</h1>`);\n});\n\n\n2. SQL-इंजेक्शन
\nयदि आपका एप्लिकेशन SQL डेटाबेस (जैसे, PostgreSQL या MySQL) का उपयोग करता है, तो क्वेरी की गलत प्रोसेसिंग से मनमाना SQL कोड निष्पादित हो सकता है।
\n\nकमजोर कोड:
\nconst query = `SELECT * FROM users WHERE email = '${userInput}'`;\ndb.query(query, callback);\n\n\nसमाधान: हमेशा पैरामीटराइज्ड क्वेरी या ORM (जैसे, Sequelize, Prisma) का उपयोग करें।
\n\nconst query = 'SELECT * FROM users WHERE email = $1';\ndb.query(query, [userInput], callback);\n\n\n3. क्रॉस-साइट रिक्वेस्ट फोर्जरी (CSRF)
\nCSRF हमला उपयोगकर्ता को उस साइट पर एक अवांछित कार्रवाई करने के लिए मजबूर करता है जहाँ वह प्रमाणित है। उदाहरण के लिए, पैसे ट्रांसफर करना या पासवर्ड बदलना।
\n\nसुरक्षा: CSRF टोकन का उपयोग करें। Express में csurf लाइब्रेरी लोकप्रिय है (पुरानी हो चुकी है, लेकिन csrf-csrf या फ्रेमवर्क के बिल्ट-इन समाधानों से बदल दी गई है)।
const csrf = require('csrf-csrf');\nconst { generateToken } = csrf();\n\napp.post('/transfer', (req, res) => {\n const token = req.body._csrf;\n if (!validateToken(token)) {\n return res.status(403).send('CSRF हमला');\n }\n // ट्रांसफर निष्पादित करें\n});\n\n\n4. असुरक्षित निर्भरताएँ
\nNode.js एप्लिकेशन npm से हजारों पैकेज का उपयोग करते हैं। पुरानी या कमजोर निर्भरताएँ हैकिंग का एक सामान्य कारण हैं।
\n\nसुझाव:
\n- \n
- कमजोरियों की जाँच के लिए नियमित रूप से
npm auditचलाएँ। \n - स्वचालित अपडेट के लिए
snykयाDependabotका उपयोग करें। \n - अप्रयुक्त पैकेज हटाएँ। \n
5. असुरक्षित प्रमाणीकरण और सत्र प्रबंधन
\nकमजोर पासवर्ड, लॉगिन प्रयासों की सीमा का अभाव, सत्र टोकन का गलत भंडारण - ये सब खातों से समझौता करने की ओर ले जाते हैं।
\n\nसर्वोत्तम अभ्यास:
\n- \n
- पासवर्ड को हैश किए हुए रूप में स्टोर करें (bcrypt, argon2)। \n
- कम जीवनकाल वाले JWT और रिफ्रेश-टोकन का उपयोग करें। \n
- लॉगिन प्रयासों पर सीमा निर्धारित करें (रेट लिमिटिंग)। \n
const bcrypt = require('bcrypt');\nconst saltRounds = 10;\n\n// पंजीकरण\nconst hash = await bcrypt.hash(password, saltRounds);\n\n// लॉगिन\nconst match = await bcrypt.compare(inputPassword, hash);\n\n\n6. एक्सेस कंट्रोल की कमियाँ
\nउपयोग