जावास्क्रिप्ट सुरक्षा: SQL इंजेक्शन और XSS से अपनी साइट को कैसे बचाएं

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

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

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

जावास्क्रिप्ट सुरक्षा: SQL इंजेक्शन और XSS से सुरक्षा — डेवलपर के लिए पूर्ण गाइड

\n\n

क्या आपने कभी सोचा है कि हैकर्स को वेब एप्लिकेशन इतने पसंद क्यों हैं? इसका जवाब सरल है: डेवलपर्स अक्सर "दरवाजे" खुले छोड़ देते हैं। दो सबसे लोकप्रिय खामियाँ हैं SQL इंजेक्शन और XSS (क्रॉस-साइट स्क्रिप्टिंग)। भले ही आप जावास्क्रिप्ट में लिखते हों, इसका मतलब यह नहीं है कि आप सर्वर-साइड हमलों से सुरक्षित हैं। इस लेख में, हम समझेंगे कि कमजोरियों को कैसे पहचानें और, सबसे महत्वपूर्ण, आधुनिक सुरक्षा प्रथाओं का उपयोग करके उन्हें कैसे बंद करें।

\n\n

जावास्क्रिप्ट डेवलपर को सुरक्षा के बारे में क्यों सोचना चाहिए?

\n

कई नौसिखिए सोचते हैं: "मैं फ्रंटएंड पर लिखता हूँ, डेटाबेस को नहीं छूता — मुझे कोई खतरा नहीं है।" यह एक खतरनाक भ्रम है। जावास्क्रिप्ट आज हर जगह काम करता है: क्लाइंट (ब्राउज़र) पर, सर्वर (Node.js) पर और यहाँ तक कि डेटाबेस (MongoDB) में भी। और इसका मतलब है कि सुरक्षा की जिम्मेदारी आप पर आती है। SQL इंजेक्शन और XSS सिर्फ पाठ्यपुस्तकों के उबाऊ शब्द नहीं हैं, ये वास्तविक खतरे हैं जो आपके प्रोजेक्ट को नष्ट कर सकते हैं, उपयोगकर्ता डेटा चुरा सकते हैं या आपकी साइट को वायरस का अड्डा बना सकते हैं।

\n\n

SQL इंजेक्शन: आपके डेटाबेस के लिए अदृश्य खतरा

\n

SQL इंजेक्शन एक हमला है जिसमें हमलावर इनपुट फ़ील्ड (फॉर्म, URL, हेडर) के माध्यम से दुर्भावनापूर्ण SQL कोड "इंजेक्ट" करता है। यदि आप PostgreSQL, MySQL या किसी अन्य रिलेशनल डेटाबेस के साथ Node.js का उपयोग कर रहे हैं, तो आप जोखिम में हैं।

\n\n

जावास्क्रिप्ट में SQL इंजेक्शन कैसा दिखता है?

\n

कल्पना करें कि आपके पास एक लॉगिन फॉर्म है, और आप इस तरह क्वेरी लिखते हैं:

\n
// ❌ खतरनाक: SQL इंजेक्शन के लिए असुरक्षित\nconst username = req.body.username;\nconst password = req.body.password;\nconst query = `SELECT * FROM users WHERE username = '${username}' AND password = '${password}'`;
\n

अब कल्पना करें कि हमलावर username फ़ील्ड में दर्ज करता है: admin' --। क्वेरी बन जाती है:

\n
SELECT * FROM users WHERE username = 'admin' --' AND password = '';
\n

-- SQL में एक टिप्पणी है। इसके बाद सब कुछ अनदेखा कर दिया जाता है। हैकर बिना पासवर्ड के एडमिन के रूप में लॉग इन करता है। और अगर वह '; DROP TABLE users; -- दर्ज करता है? आप उपयोगकर्ताओं की पूरी तालिका खो देंगे।

\n\n

सुरक्षा: पैरामीटराइज्ड क्वेरीज़ (prepared statements)

\n

SQL इंजेक्शन से बचाव का सबसे अच्छा तरीका है कि उपयोगकर्ता डेटा को कभी भी सीधे क्वेरी स्ट्रिंग में न डालें। पैरामीटराइज्ड क्वेरीज़ का उपयोग करें। Node.js में pg लाइब्रेरी (PostgreSQL) के साथ इसे इस प्रकार किया जाता है:

\n\n
// ✅ सुरक्षित: पैरामीटराइज्ड क्वेरी\nconst { Pool } = require('pg');\nconst pool = new Pool();\n\napp.post('/login', async (req, res) => {\n  const { username, password } = req.body;\n  \n  // $1 और $2 चिह्न प्लेसहोल्डर हैं\n  const query = 'SELECT * FROM users WHERE username = $1 AND password = $2';\n  const values = [username, password];\n  \n  try {\n    const result = await pool.query(query, values);\n    // परिणाम की प्रक्रिया...\n  } catch (error) {\n    console.error('क्वेरी त्रुटि:', error);\n  }\n});
\n

लाइब्रेरी स्वयं मानों को एस्केप करती है। भले ही हमलावर admin' -- पास करे, इसे SQL कमांड के बजाय एक सामान्य स्ट्रिंग के रूप में माना जाएगा।

\n\n

अतिरिक्त सुरक्षा उपाय

\n
    \n
  • सर्वर पर वैलिडेशन: इनपुट डेटा के प्रकार और लंबाई की जाँच करें। यदि ईमेल अपेक्षित है, तो सुनिश्चित करें कि यह वास्तव में ईमेल है।
  • \n
  • न्यूनतम विशेषाधिकार का सिद्धांत: एप्लिकेशन में डेटाबेस के रूट उपयोगकर्ता का उपयोग न करें। केवल आवश्यक तालिकाओं तक पहुँच वाला एक अलग उपयोगकर्ता बनाएँ।
  • \n
  • ORM लाइब्रेरीज़: Prisma, Sequelize या TypeORM का उपयोग करें। वे पैरामीटराइजेशन को स्वचालित करते हैं, लेकिन याद रखें कि उनमें भी असुरक्षित कोड लिखा जा सकता है (उदाहरण के लिए, कॉन्केटनेशन के साथ sequelize.query का उपयोग करके)।
  • \n
\n\n

XSS (क्रॉस-साइट स्क्रिप्टिंग): जब आपकी साइट खुद पर हमला करती है

\n

XSS एक हमला है जिसमें हमलावर पेज पर दुर्भावनापूर्ण जावास्क्रिप्ट कोड इंजेक्ट करता है, जो

ब्लॉग

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