जावास्क्रिप्ट अनुप्रयोग सुरक्षा: व्यवहार में शीर्ष 10 कमजोरियाँ

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: जावास्क्रिप्ट अनुप्रयोग सुरक्षा एक विकल्प नहीं, बल्कि एक आवश्यकता क्यों है

\n

जावास्क्रिप्ट (विशेषकर Node.js प्लेटफॉर्म पर) क्लाइंट और सर्वर दोनों तरह के अनुप्रयोग बनाने के लिए एक प्रमुख भाषा बन गई है। हालांकि, बढ़ती लोकप्रियता के साथ हमलों की संख्या भी बढ़ रही है। OWASP के अनुसार, अधिकांश सेंधमारी सामान्य त्रुटियों के कारण होती हैं जिन्हें रोका जा सकता है। इस लेख में हम कोड के वास्तविक उदाहरणों और सुरक्षा विधियों के साथ शीर्ष 10 जावास्क्रिप्ट (Node.js) कमजोरियों का विश्लेषण करेंगे। यह सामग्री शुरुआती और अनुभवी डेवलपर्स दोनों के लिए उपयोगी होगी जो अपनी परियोजनाओं की सुरक्षा को मजबूत करना चाहते हैं।

\n\n

1. इंजेक्शन (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
\n\n

2. क्रॉस-साइट स्क्रिप्टिंग (XSS)

\n

XSS हमलावर को उस पेज में एक दुर्भावनापूर्ण स्क्रिप्ट डालने की अनुमति देता है जिसे अन्य उपयोगकर्ता देख रहे हैं।

\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
\n\n

3. असुरक्षित प्रमाणीकरण और सत्र प्रबंधन

\n

कमजोर प्रमाणीकरण डेटा लीक के प्रमुख कारणों में से एक है। अक्सर डेवलपर्स कुंजियों को हार्डकोड करते हैं या कमजोर पासवर्ड का उपयोग करते हैं।

\n\n

सामान्य त्रुटियाँ:

\n
    \n
  • पासवर्ड को सादे टेक्स्ट में संग्रहीत करना (bcrypt/argon2 के बजाय)।
  • \n
  • अनुमानित JWT-सीक्रेट का उपयोग करना (secret123).
  • \n
  • लॉगिन प्रयासों की संख्या पर सीमा का अभाव।
  • \n
\n\n

सही कार्यान्वयन का उदाहरण:

\n
const 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\n

4. SSRF (Server-Side Request Forgery)

\n

SSRF कमजोरी हमलावर को सर्वर को आंतरिक संसाधनों (जैसे, क्लाउड प्रदाता के मेटाडेटा) के लिए अनुरोध करने के लिए मजबूर करने की अनुमति देती है।

\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
  • ब्लॉक

ब्लॉग

पुस्तक अनुशंसाएँ