सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 · पाठ

SQL इंजेक्शन की रोकथाम

समझें कि SQL इंजेक्शन कैसे काम करता है और पैरामीटरयुक्त क्वेरी तथा तैयार कथनों का उपयोग करके सुदृढ़ सुरक्षा उपाय लागू करें।

पाठ 1, कुल 4 में से11 चरण

SQL इंजेक्शन की रोकथाम, CoddyKit पर सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

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

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

इस चाल को SQL इंजेक्शन (SQLi) कहा जाता है। ऐसा तब होता है जब उपयोगकर्ता इनपुट को केवल डेटा के बजाय स्वयं SQL कमांड का हिस्सा मान लिया जाता है।

SQLi के कारण ये समस्याएँ हो सकती हैं:

  • डेटा की चोरी या उसमें बदलाव
  • लॉगिन स्क्रीन को दरकिनार करना
  • डेटाबेस सर्वर पर नियंत्रण प्राप्त करना

SQLi कैसे काम करता है: लॉगिन का उदाहरण

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

SELECT * FROM users WHERE username = 'your_username' AND password = 'your_password';

यदि 'your_username' केवल नाम न होकर SQL कोड का एक अंश भी हो तो?

कमजोर कोड

एक सामान्य गलती है उपयोगकर्ता इनपुट को क्वेरी स्ट्रिंग के साथ सीधे जोड़कर SQL क्वेरी बनाना। यहाँ Java में इसका सरल उदाहरण दिया गया है:

public class Main {
  public static void main(String[] args) {
    String username = "admin"; // User input
    String password = "pass123"; // User input
    
    // DANGEROUS: String concatenation
    String query = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "';";
    
    System.out.println("Executing query:\n" + query);
    // In a real app, this query would go to the database.
  }
}

दुर्भावनापूर्ण इनपुट तैयार करना

अब कल्पना कीजिए कि कोई दुर्भावनापूर्ण उपयोगकर्ता अपने उपयोगकर्ता नाम के रूप में यह दर्ज करता है:

admin' OR '1'='1

और पासवर्ड के लिए कोई भी पाठ दर्ज करता है। कमजोर क्वेरी के साथ जोड़ने पर यह इस तरह बन जाता है:

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

OR '1'='1 वाला भाग शर्त को हमेशा सही बना देता है, जिससे पासवर्ड जाँच प्रभावी रूप से दरकिनार हो जाती है और हमलावर लॉग इन कर लेता है!

तैयार कथनों का परिचय

SQL इंजेक्शन से बचाव का सबसे अच्छा तरीका तैयार कथनों (जिन्हें पैरामीटरयुक्त क्वेरी भी कहा जाता है) का उपयोग करना है।

ये SQL तर्क को उपयोगकर्ता द्वारा दिए गए डेटा से अलग रखते हैं। इनपुट को सीधे डालने के बजाय, अपनी क्वेरी में प्लेसहोल्डर (जैसे ?) का उपयोग करें।

इसके बाद डेटाबेस समझता है कि इन प्लेसहोल्डरों के लिए दी गई कोई भी चीज़ शुद्ध डेटा है, कमांड का हिस्सा नहीं।

तैयार कथनों का प्रयोग

यहाँ दिखाया गया है कि ID के आधार पर किसी उपयोगकर्ता की सुरक्षित क्वेरी के लिए तैयार कथन का उपयोग कैसे करें। ? प्लेसहोल्डर पर ध्यान दें।

public class Main {
  public static void main(String[] args) {
    int userId = 123; // User input
    
    // Secure: Using a placeholder for the value
    String sql = "SELECT name, email FROM users WHERE id = ?;";
    
    // In a real application, you'd 'prepare' this SQL
    // and then 'set' the parameter value (userId) separately.
    System.out.println("Prepared SQL: " + sql);
    System.out.println("Parameter 1 (id): " + userId);
    // The database treats 'userId' as a value, not SQL code.
  }
}

पैरामीटर SQLi को कैसे रोकते हैं

जब आप तैयार कथन का उपयोग करते हैं:

  • जिम्मेदारियों का पृथक्करण: SQL क्वेरी की संरचना पहले डेटाबेस को भेजी जाती है।
  • डेटा बनाम कोड: डेटाबेस क्वेरी को पहले से संकलित करता है। फिर, जब आप प्लेसहोल्डरों के लिए मान देते हैं, तो वह उन्हें सख्ती से डेटा के रूप में मानता है।
  • स्वचालित एस्केपिंग: डेटाबेस आपके इनपुट में मौजूद विशेष वर्णों को अपने-आप संभालता है और उन्हें SQL कमांड के रूप में समझे जाने से रोकता है।

इससे यह सुनिश्चित होता है कि ' OR '1'='1 जैसा दुर्भावनापूर्ण इनपुट क्वेरी के उद्देश्य को बदल नहीं सकता।

लॉगिन उदाहरण को सुरक्षित करना

आइए तैयार कथनों का उपयोग करके अपने कमजोर लॉगिन उदाहरण को ठीक करें। अब, यदि कोई उपयोगकर्ता SQL इंजेक्ट करने का प्रयास भी करे, तो उसे कमांड के रूप में नहीं, बल्कि उसके उपयोगकर्ता नाम या पासवर्ड के हिस्से के रूप में माना जाएगा।

public class Main {
  public static void main(String[] args) {
    String username = "admin' OR '1'='1"; // Malicious input
    String password = "any_password"; // Malicious input
    
    // SECURE: Using prepared statement with placeholders
    String sql = "SELECT * FROM users WHERE username = ? AND password = ?;";
    
    // Simulating how parameters are set (conceptual)
    System.out.println("Prepared SQL: " + sql);
    System.out.println("Parameter 1 (username): " + username);
    System.out.println("Parameter 2 (password): " + password);
    
    System.out.println("\nDatabase will look for a user with the literal username 'admin' OR '1'='1' and the given password. This user likely won't exist. Attack thwarted!");
  }
}

लॉगिन से आगे: सभी SQL संचालन

तैयार कथन केवल SELECT क्वेरी के लिए नहीं होते। उपयोगकर्ता इनपुट से जुड़े ALL SQL संचालनों के लिए इनका उपयोग करना चाहिए:

  • INSERT कथन (जैसे, नया उपयोगकर्ता जोड़ना)
  • UPDATE कथन (जैसे, उपयोगकर्ता की प्रोफ़ाइल बदलना)
  • DELETE कथन (जैसे, डेटा हटाना)

जब तक इसके विपरीत प्रमाण न हो, हमेशा मानें कि उपयोगकर्ता इनपुट दुर्भावनापूर्ण है। पैरामीटरयुक्त क्वेरी आपके बचाव की पहली पंक्ति हैं।

त्वरित जाँच: सुरक्षित क्वेरी

निम्नलिखित में से कौन-सा कोड अंश नाम से उत्पाद खोजते समय SQL इंजेक्शन रोकने के लिए पैरामीटरयुक्त क्वेरी का सही उपयोग करता है?

पुनरावलोकन: SQL इंजेक्शन की रोकथाम

बहुत अच्छा! इस पाठ में आपने सीखा:

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

अपने बैकएंड को सुरक्षित रखने के लिए उपयोगकर्ता इनपुट से जुड़े किसी भी SQL संचालन में हमेशा तैयार कथनों का उपयोग करें!

शुरुआत निःशुल्क

एआई शिक्षक के साथ सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
12
पाठ
48

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

क्या “SQL इंजेक्शन की रोकथाम” पाठ निःशुल्क है?

हाँ — सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “SQL इंजेक्शन की रोकथाम” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“SQL इंजेक्शन की रोकथाम” में मैं क्या सीखूँगा?

समझें कि SQL इंजेक्शन कैसे काम करता है और पैरामीटरयुक्त क्वेरी तथा तैयार कथनों का उपयोग करके सुदृढ़ सुरक्षा उपाय लागू करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“SQL इंजेक्शन की रोकथाम” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. SQL इंजेक्शन की रोकथाम
  2. कमांड और कोड इंजेक्शन
  3. बैकएंड में क्रॉस-साइट स्क्रिप्टिंग (XSS)
  4. XML और LDAP इंजेक्शन की रोकथाम
← सुरक्षित कोडिंग और बैकएंड के लिए OWASP के शीर्ष 10 पर वापस जाएँ