flawopen.com/SQL इंजेक्शन/Javascript

SQL इंजेक्शन in Javascript

गंभीर CWE-89 Draft — pending review
Language: English Português (Brasil) Español Français Deutsch Русский 简体中文 日本語 हिन्दी 한국어 Bahasa Indonesia
सरल व्याख्या (ELI5)

सोचिए एक टिकट काउंटर जहां केवल टिकट नंबर दर्ज करना है। यदि कोई चालाक कोड टाइप करके सिस्टम से सभी टिकट दिखाने को कह दे, तो यह SQL इंजेक्शन है।

इस पृष्ठ पर मुख्य शर्तें
टेम्पलेट लिटरल
बैकटिक्स (`...`) में स्ट्रिंग फॉर्मेटिंग, जो अनजाने में असुरक्षित स्ट्रिंग संयोजन बन जाती है।

क्या हो रहा है

उपयोगकर्ता इनपुट को सीधे SQL टेक्स्ट में जोड़ने से यह भेद्यता उत्पन्न होती है।

वास्तविक दुनिया का प्रभाव

2015 में टॉकटॉक कंपनी के 150,000 ग्राहकों का डेटा लीक हुआ और 400,000 पाउंड का जुर्माना लगाया गया।

स्रोत: यूके सूचना आयुक्त कार्यालय (ICO), 2016।

असुरक्षित बनाम सुरक्षित कोड

VULNERABLE
// userId comes straight from request query
async function getUser(pool, userId) {
  const query = `SELECT * FROM users
    WHERE id = ${userId}`;
  const [rows] = await pool.query(query);
  return rows[0];
}
FIXED
// value is passed separately, never inlined
async function getUser(pool, userId) {
  const [rows] = await pool.query(
    'SELECT * FROM users WHERE id = ?',
    [userId]
  );
  return rows[0];
}

समाधान कैसे काम करता है

पैरामीटरयुक्त क्वेरी स्ट्रक्चर और डेटा को अलग-अलग भेजती है जिससे इनपुट कोड के रूप में निष्पादित नहीं होता।

भाषा-विशिष्ट सावधानियां

ड्राइवर सिंटैक्स में अंतर

mysql2 में ? का उपयोग होता है जबकि pg में $1, $2 का।

आम गलतफहमियां

केवल कोट्स हटाना काफी है

मैनुअल एस्केपिंग विफल हो सकती है, पैरामीटर बाइंडिंग ही एकमात्र सुरक्षित तरीका है।

प्रभावित होने की जांच कैसे करें

grep -rn "query(\`.*\${" --include="*.js" --include="*.ts" . npx eslint --rule 'no-template-curly-in-string: error' .
Run Semgrep with p/javascript ruleset in CI to catch unparameterized database queries automatically.

रोकथाम चेकलिस्ट

अक्सर पूछे जाने वाले प्रश्न

क्या ORM सुरक्षित है?

सामान्य API सुरक्षित है, लेकिन raw query में पैरामीटर पास करना आवश्यक है।

संदर्भ

इस भाषा में देखें: Javascript Python JavaScript Java Go PHP C# Rust
यह भी देखें: Cross-Site Scripting Command InjectionPath Traversal