जावास्क्रिप्ट अनुप्रयोग सुरक्षा: शीर्ष 10 कमजोरियाँ
जावास्क्रिप्ट, विशेष रूप से Node.js वातावरण में, आधुनिक वेब विकास की नींव बन गया है। हालाँकि, इसकी लोकप्रियता अनुप्रयोगों को हमलों के लिए एक आकर्षक लक्ष्य बनाती है। सुरक्षा मुद्दों की अनदेखी करने से डेटा लीक, वित्तीय नुकसान और प्रतिष्ठा को नुकसान हो सकता है। इस लेख में, हम OWASP Top 10 मानक पर आधारित जावास्क्रिप्ट (Node.js) अनुप्रयोगों की शीर्ष 10 सबसे महत्वपूर्ण कमजोरियों पर चर्चा करेंगे, और कोड उदाहरणों के साथ दिखाएंगे कि उन्हें कैसे रोका जाए।
1. इंजेक्शन (Injection)
इंजेक्शन सबसे खतरनाक खतरों में से एक बना हुआ है। Node.js के संदर्भ में, SQL-इंजेक्शन और NoSQL-इंजेक्शन (जैसे MongoDB में) सबसे आम हैं।
समस्या
डेटाबेस क्वेरी में उपयोगकर्ता इनपुट का सीधा संयोजन हमलावर को मनमाना कोड निष्पादित करने की अनुमति देता है।
कमजोर कोड का उदाहरण
const user = req.body.username;const query = `SELECT * FROM users WHERE username = '${user}'`;db.query(query, callback);समाधान
पैरामीटरीकृत क्वेरी या ORM/ODM का उपयोग करें। MongoDB के लिए mongo-sanitize लागू करें।
const query = 'SELECT * FROM users WHERE username = $1';db.query(query, [user], callback);2. प्रमाणीकरण और सत्र प्रबंधन का उल्लंघन
कमजोर प्रमाणीकरण खातों से समझौता करने का सीधा रास्ता है।
समस्या
पूर्वानुमानित टोकन का उपयोग (जैसे none एल्गोरिदम वाला JWT), पासवर्ड को सादे पाठ में संग्रहीत करना, या लॉगिन प्रयासों की सीमा का अभाव।
कमजोरी का उदाहरण
// एल्गोरिदम जांच के बिना JWTconst token = jwt.sign({ user: 'admin' }, 'secret', { algorithm: 'none' });समाधान
- हमेशा JWT एल्गोरिदम जांचें:
jwt.verify(token, secret, { algorithms: ['HS256'] })। - पासवर्ड को
bcryptयाargon2के माध्यम से संग्रहीत करें। - लॉगिन प्रयासों की सीमा लागू करें (
express-rate-limit)।
const bcrypt = require('bcrypt');const saltRounds = 10;const hash = await bcrypt.hash(password, saltRounds);3. XSS (क्रॉस-साइट स्क्रिप्टिंग)
XSS एक वेब पेज में दुर्भावनापूर्ण स्क्रिप्ट डालने की अनुमति देता है, जो बाद में पीड़ित के ब्राउज़र में निष्पादित होती है।
समस्या
बिना एस्केपिंग के उपयोगकर्ता सामग्री प्रदर्शित करना, विशेष रूप से Next.js या Nuxt.js में Server-Side Rendering (SSR) का उपयोग करते समय।
कमजोर कोड (Express)
res.send(`<h1>Hello, ${req.query.name}</h1>`);समाधान
- आउटपुट को एस्केप करें:
escape-htmlलाइब्रेरी या ऑटो-एस्केपिंग वाले टेम्पलेट इंजन (EJS, Pug) का उपयोग करें। - CSP (Content Security Policy) हेडर सेट करें:
helmet.contentSecurityPolicy()।
const helmet = require('helmet');app.use(helmet.contentSecurityPolicy({ directives: { defaultSrc: ["'self'"] }}));4. असुरक्षित प्रत्यक्ष ऑब्जेक्ट संदर्भ (IDOR)
यह कमजोरी तब उत्पन्न होती है जब कोई उपयोगकर्ता उनकी पहचान जानकर या अनुमान लगाकर ऑब्जेक्ट (फ़ाइलें, DB रिकॉर्ड) तक पहुँच सकता है।
उदाहरण
app.get('/api/user/:id', (req, res) => { // कोई जांच नहीं कि req.user.id === req.params.id const user = db.findUser(req.params.id); res.json(user);});समाधान
हमेशा सर्वर स्तर पर पहुँच अधिकारों की जाँच करें।
if (req.user.id !== req.params.id) { return res.status(403).send('Forbidden');}5. असुरक्षित सुरक्षा कॉन्फ़िगरेशन
इसमें डिफ़ॉल्ट क्रेडेंशियल्स का उपयोग, प्रोडक्शन में डीबग मोड, और गलत CORS सेटिंग्स शामिल हैं।
समस्या
// खुला CORSapp.use(cors({ origin: '*' }));