मुख्य सामग्री पर जाएं

SQL इंजेक्शन: यह कैसे काम करता है और इसे कैसे रोका जाए

SQL इंजेक्शन, यह कैसे काम करता है, और अपने सिस्टम को दुर्भावनापूर्ण हमलों से कैसे सुरक्षित रखें—इसके बारे में जानें।
अपडेट किया गया 25 सित॰ 2026  · 8 मि॰ पढ़ें

AI के साथ खोजें

ChatGPTClaudePerplexity

SQL इंजेक्शन (या संक्षेप में SQLi) हैकरों की सबसे पुरानी तरकीबों में से एक है, लेकिन यह अब भी बेहद आम और बेहद खतरनाक है। संक्षेप में, यह डेटाबेस को वे चीज़ें उजागर करने के लिए बहकाने के बारे में है जो उसे नहीं करनी चाहिए।

इस लेख में, मैं आपको बताऊँगा कि वास्तव में SQL इंजेक्शन क्या है, हमलावर इसे किन-किन तरीकों से इस्तेमाल करते हैं, कुछ वास्तविक उदाहरण जिनसे गंभीर नुकसान हुआ, और शायद सबसे महत्वपूर्ण—आप इसे कैसे रोक सकते हैं। चाहे आप डेवलपर हों या बस यह जानने के इच्छुक हों कि इंटरनेट पर चीज़ें कैसे टूटती हैं, आप SQLi को अच्छी तरह समझ कर निकलेंगे (वह भी बिना आधे में ऊँघे, वादा है)।

SQL इंजेक्शन क्या है? 

SQL इंजेक्शन एक ऐसा हमला है जब कोई आपके ऐप द्वारा डेटाबेस को भेजी जाने वाली SQL क्वेरीज़ के साथ छेड़छाड़ करने का तरीका ढूँढ लेता है। सामान्यतः, ये क्वेरीज़ यूज़र प्रोफाइल लाने या किसी प्रोडक्ट लिस्टिंग को अपडेट करने जैसे काम करती हैं। लेकिन SQLi में, हमलावर आपके इनपुट फ़ील्ड्स (जैसे सर्च बार या लॉगिन फ़ॉर्म) में खतरनाक SQL कोड इंजेक्ट कर सकता है, और अचानक डेटाबेस वही करने लगता है जो वे चाहते हैं।

यह काम क्यों करता है? 

क्योंकि कहीं न कहीं एप्लिकेशन यूज़र इनपुट पर ज़्यादा भरोसा कर रहा होता है, और उसे संभावित निष्पाद्य कोड की बजाय हानिरहित टेक्स्ट समझ लेता है। यह वैसा ही है जैसे किसी को फ़ॉर्म भरने दें और फिर उन्होंने जो लिखा उसे सीधे कमांड कंसोल में पेस्ट कर दें।

यह बुरा क्यों है?

SQL इंजेक्शन खतरनाक है क्योंकि इसका इस्तेमाल निजी डेटा (जैसे यूज़रनेम, पासवर्ड या क्रेडिट कार्ड जानकारी) देखने या चुराने, लॉगिन स्क्रीन बायपास करने, डेटा हटाने या बदलने, और सबसे बुरे हालात में पूरे डेटाबेस सर्वर पर नियंत्रण पाने तक के लिए किया जा सकता है।

तो हाँ, SQLi बुरा है—और यह कोई नया सुरक्षा मुद्दा भी नहीं—फिर भी आप यह देख कर चौंक जाएंगे कि कितने ऐप्स इसके खिलाफ ठीक से सुरक्षित नहीं हैं।

SQL इंजेक्शन के प्रकार

हमलावर आपके ऐप के साथ कैसे इंटरैक्ट करता है और उसे कैसा फीडबैक मिलता है, इस पर निर्भर करते हुए SQLi के कुछ अलग-अलग रूप होते हैं। आमतौर पर 3 प्रमुख प्रकार मिलते हैं:

इन-बैंड SQLi

यह सबसे सीधा प्रकार है। हमलावर एक दुर्भावनापूर्ण SQL क्वेरी भेजता है और परिणाम सीधे एप्लिकेशन के जरिए वापस मिल जाते हैं। यह तेज़ और अक्सर बहुत प्रभावी होता है।

  • एरर-आधारित SQLi: यह तकनीक डेटाबेस द्वारा लौटाए गए एरर मैसेज पर निर्भर करती है। ये एरर बहुत उपयोगी जानकारी उजागर कर सकते हैं, जैसे टेबल नाम या क्वेरी की संरचना, जिससे हमलावर के लिए अगला कदम प्लान करना आसान हो जाता है।

  • यूनियन-आधारित SQLi: यहाँ हमलावर UNION ऑपरेटर का इस्तेमाल कर अपनी क्वेरी को आपकी ऐप की क्वेरी के साथ जोड़ देता है। यह डेटाबेस से अतिरिक्त डेटा खींचकर प्रतिक्रिया में घुसेड़ने का चतुर तरीका है।

इन्फ़रेंशियल SQLi (उर्फ ब्लाइंड SQLi)

यह थोड़ा और चोरी-छिपे होता है। अपनी क्वेरी के नतीजे सीधे देखने के बजाय, हमलावर एप्लिकेशन के व्यवहार को देखकर अंदाज़ा लगाता है कि अंदर क्या हो रहा है।

  • बूलीयन-आधारित (कंटेंट-आधारित) SQLi: हमलावर क्वेरी में ऐसी शर्तें जोड़ता है जो या तो सही होती हैं या गलत (जैसे 1=1 या 1=2) और देखता है कि पेज कैसे बदलता है। क्या यह सामान्य रूप से लोड होता है? एरर दिखाता है? अजीब तरह से बर्ताव करता है?
  • टाइम-आधारित SQLi: इस तकनीक में क्वेरी में समय-विलंब जोड़े जाते हैं (उदा. WAITFOR DELAY '00:00:05') और प्रतिक्रिया समय का उपयोग करके अनुमान लगाया जाता है कि कोई शर्त सही है या नहीं।

आउट-ऑफ-बैंड SQLi (उर्फ जब चीज़ें फैंसी हो जाती हैं)

यह कम आम है, लेकिन जानना ज़रूरी है। आउट-ऑफ-बैंड SQLi ऐप से मिलने वाले तत्काल जवाबों पर निर्भर नहीं करता। इसकी बजाय, हमलावर DNS या HTTP रिक्वेस्ट जैसे वैकल्पिक चैनल का उपयोग कर डेटा निकालता है। यह आमतौर पर तब किया जाता है जब सीधा फीडबैक संभव नहीं होता, लेकिन डेटाबेस सर्वर को इंटरनेट एक्सेस होता है (और 90% मामलों में, उसे नहीं होना चाहिए)।

आम SQL इंजेक्शन तकनीकें

ठीक है, हमने SQL इंजेक्शन के 3 प्रकार देख लिए। लेकिन व्यावहारिक तौर पर हमलावर यह करते कैसे हैं?

OR 1=1 हमला

यह क्लासिक है। एक लॉगिन फ़ॉर्म की कल्पना करें जहाँ आपको यूज़रनेम और पासवर्ड दर्ज करना है। हमलावर कुछ ऐसा दर्ज कर सकता है:

' OR 1=1 --

SQL क्वेरी कुछ इस तरह दिखने लगती है:

SELECT * FROM users WHERE username = '' OR 1=1 --' AND password = '';

चूँकि 1=1 हमेशा सत्य होता है, डेटाबेस सभी यूज़र्स लौटा देता है, और -- बाकी क्वेरी को कमेंट में बदल देता है। यदि कोई लिमिट लागू नहीं है, तो हमलावर बिना वैध यूज़रनेम जाने भी लॉगिन हो सकता है।

' OR 1=1 attack

स्रोत: vmware

कमेंट इंजेक्शन

ऊपर देखा ही, -- या /* */ कैरेक्टर का इस्तेमाल SQL स्टेटमेंट के हिस्से को कमेंट करने के लिए होता है। हमलावर इसका उपयोग उन अतिरिक्त खंडों को हटाने के लिए करते हैं जो उनके इंजेक्ट किए गए पेलोड को बिगाड़ सकते हैं। उदाहरण के लिए, यदि उन्हें मूल क्वेरी की पूरी संरचना नहीं पता, तो वे उसे यहीं काटकर फिर से सिंटैक्स के लिहाज से वैध बना सकते हैं।

बैच SQL स्टेटमेंट्स

कुछ डेटाबेस एक ही रिक्वेस्ट में सेमीकोलन से अलग कई SQL स्टेटमेंट चलाने की अनुमति देते हैं। यदि एप्लिकेशन इसे सीमित नहीं करता, तो हैकर्स इस सुविधा से डेटा बदलने या टेबल्स ड्रॉप करने तक का नुकसान कर सकते हैं।

'; DROP TABLE users; --

UNION-आधारित हमले

एक UNION SELECT स्टेटमेंट इंजेक्ट करके, हमलावर अपनी दुर्भावनापूर्ण क्वेरी को वैध क्वेरी के साथ जोड़ सकता है और अन्य टेबलों से नतीजे ला सकता है—जैसे संवेदनशील यूज़र डेटा, पासवर्ड, या क्रेडिट कार्ड जानकारी। मूलतः यह किसी मौजूदा क्वेरी का इस्तेमाल बोनस डेटा पाने के लिए है।

ब्लाइंड SQL इंजेक्शन

यह पहले भी उल्लेखित है। भले ही ऐप एरर न दिखाए या क्वेरी नतीजे न लौटाए, हमलावर व्यवहार का निरीक्षण करके धीरे-धीरे डेटा निकाल सकता है। यह धीमा और थकाऊ है, लेकिन काम करता है। अक्सर ऐसे टूल से स्वचालित किया जाता है जो सैकड़ों क्वेरी और टाइम-आधारित प्रतिक्रियाएँ आज़मा सकते हैं।

स्टोर्ड SQL इंजेक्शन

दुर्भावनापूर्ण SQL को डेटाबेस में सेव कर दिया जाता है, जैसे किसी यूज़र प्रोफ़ाइल या कमेंट में, और बाद में जब कोई वह डेटा देखता है तो यह निष्पादित हो जाता है।

वास्तविक दुनिया के SQL इंजेक्शन हमले

SQL इंजेक्शन कोई निच हैकर चीज़ नहीं लगती—लेकिन सालों में इसने बहुत वास्तविक नुकसान किए हैं। और नुकसान से मेरा मतलब है—लाखों यूज़र रिकॉर्ड उजागर, भारी जुर्माने, और ऐसी हेडलाइंस जिनसे मार्केटिंग टीमों को कोई फायदा नहीं हुआ।

Guess.com (2002)

यह शुरुआती उदाहरण है जिसने लोगों को सचेत किया। एक सुरक्षा शोधकर्ता ने SQL इंजेक्शन की खामी का फायदा उठाकर 200,000 से अधिक ग्राहकों के रिकॉर्ड—क्रेडिट कार्ड विवरण सहित—तक पहुँच हासिल कर ली। अच्छी बात यह रही कि इसे एक एथिकल हैकर ने खोजा और रिपोर्ट किया। 

Heartland Payment Systems (2009)

यह एक विशाल उल्लंघन था जिसने एक पेमेंट प्रोसेसर को प्रभावित किया और 130+ मिलियन क्रेडिट कार्ड नंबर चोरी हुए। हमलावरों ने SQL इंजेक्शन से शुरुआती घुसपैठ की और फिर वहाँ से आगे बढ़े। इसे अक्सर अब तक के सबसे बड़े डेटा उल्लंघनों में गिना जाता है।

Yahoo! Voices (2012)

हमलावरों ने UNION-आधारित SQL इंजेक्शन की खामी का फायदा उठाया और 450,000 यूज़रनेम और सादे-टेक्स्ट पासवर्ड उजागर कर दिए। हाँ, आपने सही पढ़ा—साफ़-साफ़ टेक्स्ट में रखी क्रेडेंशियल्स। यह उल्लंघन खासा शर्मनाक था क्योंकि Yahoo! एक बड़ी टेक कंपनी थी, और अनएन्क्रिप्टेड पासवर्ड स्टोर करना 2012 के मानकों से भी एक बड़ा “डोंट” था।

TalkTalk (2015)

TalkTalk, एक हाई-प्रोफ़ाइल यूके टेलीकॉम प्रोवाइडर, एक काफ़ी बुनियादी SQL इंजेक्शन हमले का शिकार हुआ। लगभग 157,000 ग्राहक रिकॉर्ड से समझौता हुआ, और कंपनी पर £400,000 का जुर्माना लगा। हमलावरों में से एक सिर्फ़ 17 साल का था।

Gab (2021)

हैक्टिविस्ट्स ने SQL इंजेक्शन का उपयोग करके 70GB डेटा बाहर निकाला, जिसमें निजी पोस्ट और हैश किए गए पासवर्ड शामिल थे। यह उल्लंघन राजनीतिक रूप से संवेदनशील था, और इसके बाद Gab की समग्र सुरक्षा स्थिति पर और भी सवाल उठे।

SQL इंजेक्शन से कैसे बचें

ठीक है, अब जब हमने वास्तविक दुनिया के उल्लंघनों से खुद को थोड़ा डरा लिया है, तो समाधान की बात करें। अच्छी खबर यह है कि SQL इंजेक्शन को रोकना रॉकेट साइंस नहीं है। अधिकतर मामलों में, यह यूज़र इनपुट पर भरोसा न करने और सर्वोत्तम प्रक्रियाओं पर टिके रहने की बात है। आप यह कर सकते हैं:

पैरामीटराइज़्ड क्वेरी का उपयोग करें

यह नियम नंबर एक है। कभी भी स्ट्रिंग्स जोड़कर SQL क्वेरी न बनाएँ। इसके बजाय, प्लेसहोल्डर का उपयोग करें और यूज़र इनपुट को पैरामीटर के रूप में पास करें। अधिकतर फ़्रेमवर्क और लाइब्रेरी यह काम बहुत आसान बना देते हैं।

उदाहरण के लिए Node.js में pg (PostgreSQL) के साथ:

client.query('SELECT * FROM users WHERE id = $1', [userId]);

यह मूलतः डेटाबेस से कहता है, “यह रही क्वेरी की संरचना, और यह रहा डेटा—कृपया इन्हें आपस में न मिलाएँ।”

स्टोर्ड प्रोसिजर समझदारी से इस्तेमाल करें

Stored procedures मददगार हो सकती हैं, बशर्ते वे डायनेमिक SQL से बचें। विचार यह है कि SQL लॉजिक डेटाबेस में रहे और आपका ऐप उन्हीं सुरक्षित, पूर्व-परिभाषित लॉजिक ब्लॉक्स को कॉल करे।

यदि आप फ़ंक्शंस और स्टोर्ड प्रोसिजर बनाना, अपडेट करना और चलाना सीखना चाहते हैं, तो हमारा Writing Functions and Stored Procedures in SQL Server कोर्स देखें।

इनपुट को वैलिडेट और सैनिटाइज़ करें

यदि आपका ऐप किसी संख्या की अपेक्षा करता है, तो सुनिश्चित करें कि वह संख्या ही हो। यूज़र जो भी दे, उसे आँख मूँदकर स्वीकार न करें। जहाँ संभव हो, टाइप चेक, लंबाई सीमा, और अलाउलिस्ट (यानी सिर्फ़ ज्ञात अच्छे मानों की अनुमति) का उपयोग करें।

कैरक्टर एस्केपिंग (जैसे कोट्स) भी मदद कर सकती है, लेकिन यह पैरामीटराइज़्ड क्वेरी का विकल्प नहीं है।

वेब एप्लिकेशन फ़ायरवॉल (WAF) का उपयोग करें

WAF ज्ञात अटैक पैटर्न के खिलाफ पहली सुरक्षा-रेखा की तरह काम कर सकता है। यह कुछ दुर्भावनापूर्ण ट्रैफ़िक को आपकी ऐप तक पहुँचने से पहले ही ब्लॉक करने में मदद कर सकता है। यह अचूक नहीं है लेकिन उपयोगी है—कुछ-कुछ आपके SQL के लिए स्पैम फ़िल्टर जैसा।

न्यूनतम विशेषाधिकार सिद्धांत लागू करें

आपका वेब ऐप डेटाबेस से एडमिन अधिकारों के साथ कनेक्ट नहीं होना चाहिए। हर यूज़र या सर्विस क्या कर सकती/सकता है, इसे सीमित करें। उदाहरण के लिए, यदि आपके ऐप को सिर्फ़ डेटा पढ़ना है, तो उसे टेबल डिलीट करने की अनुमति न दें। उसके पास जितनी कम शक्ति होगी, इंजेक्शन उतना ही कम नुकसान कर पाएगा।

SQL इंजेक्शन टेस्टिंग और डिटेक्शन

चाहे आपको लगे कि आपका कोड सुरक्षित है, फिर भी उसे हमलावर की तरह टेस्ट करना फायदेमंद है। SQL इंजेक्शन अक्सर दरारों से फिसल जाता है, खासकर बड़े कोडबेस या लेगेसी सिस्टम में। ऐसे टूल और तकनीकें उपलब्ध हैं जो डिटेक्शन को आसान बनाती हैं—और इनके साथ खेलना काफ़ी मजेदार भी हो सकता है।

मैनुअल टेस्टिंग

कभी-कभी छेद ढूँढने का सबसे तेज़ तरीका है उसे हल्के से कुरेदना। फ़ॉर्म फ़ील्ड्स, URLs या अन्य इनपुट जगहों पर ' OR 1=1 -- या '; DROP TABLE users; -- दर्ज करके देखें कि ऐप कैसे प्रतिक्रिया देती है। यदि अजीब एरर, अप्रत्याशित डेटा, या रहस्यमयी सफल संदेश मिलें, तो संभव है आपने कुछ संदिग्ध पकड़ लिया हो।

प्रो टिप: हमेशा डेवलपमेंट या स्टेजिंग वातावरण में ही टेस्ट करें। 

ऑटोमेटेड स्कैनर

ऐसे बहुत से टूल हैं जो आपके लिए यह कुरेद-परख कर देंगे। कुछ अच्छे विकल्प:

  • sqlmap: ओपन-सोर्स टूल जो डिटेक्शन और एक्सप्लॉइटेशन को ऑटोमेट करता है (एथिकल टेस्टिंग संदर्भ में)।
  • Burp Suite: सामान्य वेब ऐप सुरक्षा के लिए बढ़िया, SQLi डिटेक्शन के एक्सटेंशन के साथ।
  • OWASP ZAP: मुफ़्त और शुरुआती उपयोगकर्ताओं के लिए अनुकूल, वेब कमजोरियाँ खोजने के लिए बनाया गया।

ये टूल हमलों का सिमुलेशन करते हैं, संभावित इंजेक्शन पॉइंट चिह्नित करते हैं, और कभी-कभी सुधार के सुझाव भी देते हैं।

लॉग विश्लेषण

एक और कारगर तरीका: अपने डेटाबेस लॉग मॉनिटर करें। बार-बार असफल क्वेरी, अजीब सिंटैक्स पैटर्न, या ', --, या UNION SELECT जैसी चीज़ों वाले रिक्वेस्ट का उछाल—ये सभी रेड फ़्लैग हैं।

निष्कर्ष

SQL इंजेक्शन अभी कहीं नहीं जा रहा—और यह उन खतरों में से एक है जो कभी पुराने नहीं पड़ते। यह सरल है, शक्तिशाली है, और यदि आप सावधान नहीं हैं तो गंभीर नुकसान कर सकता है। बात यह है कि SQLi पूरी तरह से टालने योग्य है। पैरामीटराइज़्ड क्वेरी का उपयोग करके, इनपुट वैलिडेट करके, न्यूनतम विशेषाधिकार सिद्धांत अपनाकर, और नियमित रूप से परीक्षण करके, आप अपनी एप्लिकेशंस और उपयोगकर्ताओं को SQL इंजेक्शन हमले के विनाशकारी प्रभाव से बचा सकते हैं। 

याद रखें, कोई भी पूर्णता की उम्मीद नहीं करता, लेकिन थोड़े से प्रैक्टिव प्रयास से आप अपने डेटाबेस को सुरक्षित रख सकते हैं और अपनी सुरक्षा चेकलिस्ट से इसे टिक कर सकते हैं। और यदि आप SQL को लेकर गंभीर हैं और संभावित नियोक्ताओं के सामने अपने कौशल दिखाना चाहते हैं, तो हमारा SQL Associate Certification देखें! यह दिखाएगा कि आप डेटाबेस से उपयुक्त डेटा निकालने और आम डेटा प्रश्नों के उत्तर देने के लिए SQL का उपयोग करने में सक्षम हैं।


Marie Fayard's photo
Author
Marie Fayard

मैं एक प्रोडक्ट-उन्मुख टेक लीड हूं, जो शुरुआती चरण के स्टार्टअप्स को पहले प्रोटोटाइप से लेकर प्रोडक्ट–मार्केट फिट और उससे आगे तक बढ़ाने में विशेषज्ञता रखता/रखती हूं। मुझे यह जानने में गहरी दिलचस्पी है कि लोग तकनीक का उपयोग कैसे करते हैं, और मुझे संस्थापकों व क्रॉस-फ़ंक्शनल टीमों के साथ मिलकर साहसिक विचारों को साकार करना पसंद है। जब मैं प्रोडक्ट नहीं बना रहा/रही होता/होती, तब मैं दुनिया के नए कोनों में प्रेरणा की तलाश में रहता/रहती हूं या योग स्टूडियो में जाकर मन हल्का करता/करती हूं।

FAQs

क्या SQL इंजेक्शन का उपयोग NoSQL डेटाबेस पर हमले के लिए किया जा सकता है?

पारंपरिक SQL इंजेक्शन MongoDB जैसी NoSQL डेटाबेस पर काम नहीं करता, लेकिन यदि इनपुट ठीक से सैनिटाइज़ नहीं किए गए हों तो समान इंजेक्शन-शैली के हमले हो सकते हैं (जैसे डॉक्यूमेंट इंजेक्शन या क्वेरी में हेरफेर)।

आधुनिक फ़्रेमवर्क SQL इंजेक्शन को रोकने में कैसे मदद करते हैं?

कई आधुनिक फ़्रेमवर्क (जैसे Django, Laravel, या Spring) में ORM लेयर और स्वचालित पैरामीटराइज़ेशन जैसी बिल्ट-इन सुरक्षा होती है, जो अनजाने में कमजोर क्वेरी लिखना कठिन बना देती है। लेकिन आपको इन्हें सही तरीके से इस्तेमाल करना ही होगा!

क्या मोबाइल ऐप्स भी SQL इंजेक्शन के जोखिम में हैं?

बिल्कुल। यदि कोई मोबाइल ऐप ऐसे बैकएंड API से संचार करता है जो यूज़र इनपुट के आधार पर असुरक्षित SQL क्वेरी बनाता है, तो वह उतना ही असुरक्षित है—चाहे फ्रंटएंड कितना भी लॉक-डाउन क्यों न लगे।

हमलावर SQL इंजेक्शन के लिए निशाना बनाने योग्य कमजोर वेबसाइटें कैसे ढूँढते हैं?

वे अक्सर ऑटोमेटेड स्कैनर या “Google dorking” (विशेष सर्च क्वेरी) का उपयोग करते हैं ताकि ऐसे पेज ढूँढ सकें जिनमें इनपुट फ़ील्ड्स या URL पैरामीटर हों जिन्हें एक्सप्लॉइट किया जा सके।

विषय
SQL

DataCamp के साथ सीखें

कोर्स

SQL परिचय

2 घंटा
1.6M
SQL से रिलेशनल डेटाबेस बनाना और क्वेरी करना सिर्फ दो घंटों में सीखें।
विवरण देखेंRight Arrow
पाठ्यक्रम शुरू करें

कोर्स

Databricks परिचय

3 घंटा
48.5K
Databricks Lakehouse प्लेटफ़ॉर्म के बारे में जानें और देखें कि यह डेटा आर्किटेक्चर को कैसे आधुनिक बनाता है और डेटा प्रबंधन प्रक्रियाओं को बेहतर करता है।
और देखेंRight Arrow