SQL इंजेक्शन के खिलाफ सुरक्षा एक उच्च प्राथमिकता क्यों नहीं है?


39

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

क्या आज भी इस तरह के कोड स्निपेट्स का उपयोग करने का एक कारण है?


37
यह बुरी तरह से लिखा ऑनलाइन ट्यूटोरियल पर दोष। अधिक बार नहीं, लोग सिर्फ नेट पर जो भी कोड पाते हैं, उन्हें कॉपी और पेस्ट करते हैं। जावास्क्रिप्ट भी इस तरह के अभ्यास का एक और शिकार है।
KJYe.Name

34
ब्लॉगों को दोष देते हैं। ओह, और W3Schools ...
ब्रायन ड्रिस्कॉल

13
हाँ, बिल्कुल W3Schools - देख w3fools.com
DisgruntledGoat

2
मैं लगातार लोगों को sql इंजेक्शन के बारे में चेतावनी देता देखता हूं - इसलिए मुझे नहीं लगता कि इस सवाल का आधार वैध है। यह है एक उच्च प्राथमिकता।
ग्रैंडमास्टरबी

3
मैं बहुत सारे उत्तरों में देख रहा हूं कि यह है कि गंभीर रूप से टूटे हुए PHP को सिखाना आसान है क्योंकि यह सिखाने के लिए है कि, PHP जो गंभीर रूप से टूटी हुई नहीं है। आप उस तर्क को स्वीकार नहीं कर सकते हैं और फिर भी दावा कर सकते हैं कि PHP एक बुरी भाषा नहीं है
user16764

जवाबों:


34

मुझे लगता है कि यह ज्यादातर अ) अज्ञानता के कारण है) आलस्य। शुरुआती आमतौर पर एसक्यूएल इंजेक्शन के बारे में ज्यादा नहीं जानते हैं, और जब वे इसके बारे में सुनते हैं, तो भी वे इसे अनदेखा कर देते हैं क्योंकि यह बहुत सरल और आसान होता है।


8
मैंने ऐसी चीजों को कहीं और ठीक करने की कोशिश की है, केवल यह बताया जाए कि यह समस्या के लिए प्रासंगिक नहीं है। इसलिए क्योंकि बहुत से लोग थोड़े अधिक जटिल अच्छे समाधान के लिए एक साधारण हैक पसंद करते हैं, इसलिए बुरे उदाहरण अकेले रह जाते हैं।
l0b0

6
अधिकांश लोग वास्तव में SQL इंजेक्शन के बारे में परवाह नहीं करते हैं जब तक कि वे इसके साथ नहीं मिलते हैं। फिर अचानक वे सोच रहे हैं कि उनकी टेबल कहां गई।
जोएल एथरटन

1
दूसरा कारण यह है कि SQL इंजेक्शन को हमेशा आंतरिक ऐप्स के लिए प्रासंगिक चिंता के रूप में नहीं देखा जाता है। (ऐसा नहीं है कि वे सही हैं।)
जॉन फिशर

1
यह मत भूलो कि प्रश्न का उत्तर देने के लिए उत्तर हैं। अक्सर यह छद्म कोड (या एसक्यूएल) होता है जो इस सवाल का जवाब देने के लिए होता है, जरूरी नहीं कि एक सुरक्षित और सुरक्षित प्रतिलिपि और पेस्ट समाधान प्रदान करें (इसके बावजूद कि वास्तविकता में उत्तर का उपयोग कैसे किया जा सकता है)।
दलिन सीवेराईट

1
@ l0b0 मैं किसी ऐसे व्यक्ति को जानता हूं जिसे लोगों को वर्तमान उत्पादन कोड के खिलाफ SQL इंजेक्शन हमले का प्रदर्शन करके SQL इंजेक्शन फिक्स को गंभीरता से लेना चाहिए।
user16764

26

PHP जानबूझकर ऐसे लोगों के लिए वास्तव में आसान बनाता है, जो उपयोगी गतिशील वेब पेज बनाने के लिए बहुत कम जानते हैं। इसका मतलब है कि PHP बहुत से शुरुआती लोगों को आकर्षित करने जा रहा है, जो कुछ उपयोगी बनाते हैं, अन्य उपयोगी दिखने वाले उदाहरणों से सीखते हैं, और दूसरों को यह शांत, उपयोगी चीज करने के लिए कैसे सिखाते हैं। परिणाम बहुत बुरा कोड है, और प्रोग्रामर की आपूर्ति जो किसी भी बेहतर नहीं जानते हैं।

यह केवल चीजों को बदतर बनाता है कि सक्षम प्रोग्रामर का एक बड़ा हिस्सा PHP के साथ कुछ नहीं करना चाहता है। यह उन अनुभवी लोगों के आधार को कम करता है जो दूसरों को बेहतर सिखाने के इच्छुक हैं। लेकिन वे PHP से क्यों बचते हैं? अच्छी तरह से कारकों के संयोजन के लिए। भाग में वे भाषा मौसा के साथ काम करना पसंद नहीं करते हैं। और भाग में यह है क्योंकि वे अच्छे कोड के साथ काम करना पसंद करेंगे, और वहाँ बहुत अच्छा PHP नहीं है।

समस्याओं के इस सटीक नक्षत्र का उपयोग पर्ल को भड़काने के लिए किया जाता है। एक चमकदार उदाहरण के रूप में, मैट राइट के मामले पर विचार करें, जो एक उत्साही किशोर है, जो 1990 के दशक में कई उपयोगी, अच्छी तरह से प्रलेखित और आसानी से सीजीआई स्क्रिप्ट स्थापित करने के लिए उपलब्ध कराया गया था। दुर्भाग्य से उन्होंने सुरक्षा के बारे में कुछ नहीं समझा, और न ही वे लोग जो अपने सामान का उपयोग करना चाहते थे। परिणाम मैट राइट स्क्रिप्ट अभिलेखागार था, जो शुरुआती सीजीआई लिपियों के लिए सुरक्षा समस्याओं का एक अंतहीन प्रवाह था। Http://www.scriptarchive.com/nms.html जैसे प्रयासों के बावजूद , समस्या तब तक नहीं सुधरी जब तक कि साझा होस्टिंग प्रदाताओं ने PHP को किसी अन्य चीज़ की तुलना में अधिक सुविधाजनक नहीं बना दिया। जिससे पर्ल से पीएचपी तक जाने में समस्या होती है।


जैसा कि आपने कहा, समस्या पर्ल या PHP नहीं है, इसका यह है कि ये भाषाएं शुरुआती लोगों को बहुत कुछ करने देती हैं, जो अच्छा है, लेकिन हमेशा उन्हें अच्छी तरह से करने के तरीके प्रदान नहीं करते हैं जो स्पष्ट हैं।
ज़ाचरी के

2
@ZacharyK: क्या तब डिफ़ॉल्ट रूप से भाषा की गलती नहीं है?
मोनिका

6
@ tomalak-geretkal: आप "फॉल्ट" शब्द का उपयोग करते हैं जैसे कि सामान बनाना संभव बनाने के लिए यह एक बुरी बात है। वही विशेषताएं जो बहुत सारे बुरे कोड का कारण बनती हैं, वे बहुत सारी वास्तविक समस्याओं को हल करती हैं। यह स्पष्ट नहीं है कि यह पूरी तरह से एक बुरी बात है।
btilly

पुन: 'दोष': यदि HTML (या बल्कि इसे ब्राउज़ करने वाले ब्राउज़र) XSL की तरह दोषपूर्ण सहिष्णु रहे हैं, तो कभी भी एक विश्वव्यापी वेब नहीं रहा होगा ...
बेंजोल

8

दुर्भाग्य से वहाँ से भी अधिक बुरे PHP ट्यूटोरियल के टन कर रहे हैं और कुछ पुराने PHP पुस्तकों को भी लोगों को उचित कोड लिखने के लिए (register_globals आदि का उपयोग नहीं) बताने के लिए चूसा है।

इसके अतिरिक्त, magic_quotes_gpcअतीत में सक्षम होने के साथ , लोगों ने बचने की परवाह नहीं की क्योंकि "यह बस काम करता था"।


4

व्यक्तिगत रूप से, मेरा मानना ​​है कि PHP का उपयोग करना आसान है, इसलिए स्वाभाविक रूप से इसका दुरुपयोग करना आसान है।


2

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

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

दी, हम असेंबली लैंग्वेज के बाद से एक लंबा सफर तय कर चुके हैं, और मुझे लगता है कि मैं अधिक आधुनिक भाषा में अधिक उत्पादक प्रोग्रामिंग, जैसे कि PHP, पायथन, रूबी, या जावा।

PHP (और अन्य स्क्रिप्टिंग भाषाओं) ने वास्तव में प्रवेश के लिए बाधा को कम किया है। इसका मतलब यह हो सकता है कि प्रोग्रामिंग के लिए अधिक नए चेहरे पहले PHP की कोशिश करें। लेकिन इसका निश्चित रूप से यह भी मतलब नहीं है कि सभी PHP प्रोग्रामर किसी भी तरह कम योग्य हैं, या अन्य भाषाओं के प्रोग्रामर की तुलना में अपनी गलतियों से सीखने में कम सक्षम हैं।

रैसमस लेरडोर्फ ने 1994 में अपने मूल रूप में PHP बनाया, यह तब से काफी विकसित हुआ है। अपने सबसे आधुनिक अवतार में, यह ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग, साथ ही सिम्फनी जैसे शानदार फ्रेमवर्क का समर्थन करता है। PHP एक भाषा के रूप में अपने मूल बाधाओं से मुक्त हो गई है, और प्रोग्रामर इसका उपयोग करने के लिए कैसे चुन सकते हैं में महान लचीलापन प्रदान करते हैं। आप स्पेगेटी कोड की 9,000 लाइन स्क्रिप्ट बनाने के लिए इसका उपयोग कर सकते हैं, या आप इसे एक आधुनिक, एमवीसी ढांचे के संदर्भ में उपयोग कर सकते हैं, जैसे कि सिम्फनी: यह आपकी पसंद है!

मुझे दृढ़ता से संदेह है कि सुरक्षा भेद्यता केवल एक ही भाषा तक सीमित नहीं है। यह किसी भी तरह से कम सक्षम या असुरक्षित कोड लिखने के लिए प्रवण के रूप में सभी PHP प्रोग्रामर को लिखने के लिए लुभा रहा है। लेकिन मुझे आश्चर्य है कि इसमें से कितना भाषा पूर्वाग्रह है, और यह कितना तथ्य है?


मैंने "सभी PHP प्रोग्रामर" के बारे में कुछ नहीं कहा।
मोनिका

2

मुझे लगता है कि समस्या का हिस्सा वे लोग हैं जो कोड को कॉपी करते हैं बिना यह जानने की जहमत उठाए कि वे क्या कर रहे हैं, लेकिन वास्तव में मेरे दिमाग में जिस तरह से हम सिखाते हैं कि porgamnming टूट गया है और यह एक कारण है कि इतना बुरा कोड क्यों है। हम सिंटैक्स को संदर्भ से बाहर सिखाते हैं और इसलिए शुरुआती यह नहीं जानते कि कुछ का उपयोग कब करना है और कब नहीं और किन सिंटैक्स को हल करने का इरादा है और किन समस्याओं को हल करने का इरादा नहीं है। इसलिए वे एक हथौड़ा का उपयोग करते हैं जब एक रिंच बेहतर उपकरण होता।

उदाहरण के लिए, सिंटैक्स सिखाने के बजाय, आप पाठ्यक्रम को व्यवस्थित करते हैं जैसे (स्पष्ट रूप से अधिक चरण होंगे, यह सिर्फ़ सिंटैक्स पढ़ाने के बजाय बुनियादी से अधिक जटिल समस्याओं के निर्माण का एक मूल उदाहरण है):

  1. इस तरह आप एक बेसिक वेब पेज सेट करते हैं
  2. यह है कि आप एक डेटाबेस से वेब पेज पुल डेटा बनाते हैं
  3. यह है कि आप वेब पेज से डेटाबेस में डेटा कैसे भेजते हैं
  4. यह है कि आप सुनिश्चित करें कि सही डेटा भेजा गया है।
  5. यह है कि आप अपने डेटाबेस को दुर्भावनापूर्ण डेटा प्रविष्टि से कैसे बचाते हैं

यह कम या ज्यादा जिस तरह से मुझे php +1 सिखाया गया था
Rémi

1

मुझे लगता है कि आपको एमएस एसक्यूएल + एएसपी / एएसपी.नेट उदाहरणों की एक समान राशि मिलेगी जो कि केवल कमजोर हैं।

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

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


6
यह एक तरफ नहीं होना चाहिए। यह मूल पाठ का हिस्सा होना चाहिए। संभवतः एक बड़े, मोटे, चीजों को करने के गलत तरीके के बारे में चेतावनी के साथ। लोग उन चीज़ों को काटने और चिपकाने की कोशिश करते हैं जो वे पहले देखते हैं, और आप वास्तव में चाहते हैं कि चीजों को करने का सही तरीका हो।
btilly

निश्चित रूप से .NET वर्ल्ड पैरामीटरिंग इन दिनों बहुत सीधा है और वास्तव में 'पेज वन' सामान होना चाहिए।
एलन बी।

1

अपने बदनाम ब्लॉग प्रविष्टि में PHP के मूल लेखक, रैसमस लेर्डोर्फ "नो-फ्रेमवर्क" की वकालत करते हैं । यद्यपि SQL प्रश्नों के लिए वह PDO का उपयोग करता है, इसलिए SQL इंजेक्शन का कोई जोखिम नहीं है। अभी भी ORMs परतों के साथ आधुनिक MVC चौखटे की तुलना में काफी बदसूरत और अप्रचलित है।


5
यह निश्चित रूप से जटिल फ्रेमवर्क वाली ओवर-इंजीनियर साइटों के लिए संभव है जिनकी आपको अभी आवश्यकता नहीं है। मैं कहूंगा कि रासमस के सुझाव आपराधिक रूप से खतरनाक हैं, लेकिन निश्चित रूप से एक मध्य मैदान है।
मोनिका

आजकल ORM का उपयोग ओवर-इंजीनियरिंग नहीं है; यह मानक है। तो एमवीसी पैटर्न का उपयोग कर रहा है।
vartec

3
@vartec: यह शायद ही "मानक" है, क्योंकि सभी भेड़ें इसका उपयोग कर रही हैं (और, इसके लिए क्या मूल्य है, सभी भेड़ें भी इसका उपयोग नहीं कर रही हैं)। छोटी स्क्रिप्ट के लिए यह आसानी से ओवर-इंजीनियरिंग हो सकता है।
मोनिका

1
@ टोमलाक: यह मानक है, क्योंकि यह स्वच्छ और टिकाऊ परियोजनाओं को लागू करने का तरीका है। "छोटी लिपियाँ" समय के साथ विकसित होती हैं और अचिन्त्य रूपी मठों में बदल जाती हैं।
vartec

2
@vartec: मुझे लगता है कि आपने "मानक" के अर्थ को गलत समझा है।
मोनिका

1

आप इस खराब अभ्यास को PHP पर ही दोष दे सकते हैं। PHP के लिगेसी वर्जन (लगभग 2006 तक) सभी GET और POST इनपुट वैरिएबल से बच जाते थे ताकि वे DEFAULT द्वारा डेटाबेस क्वेरी इंटरपोलेशन के लिए उपयुक्त हों। Http://php.net/manual/en/security.magicquotes.php देखें


2
एक समय था जब वे सभी चर से बच जाते थे जैसे कि वे विशेष रूप से MySQL में जा रहे थे, चाहे वे कभी भी थे या नहीं । भाषा डिजाइनरों के लिए ध्यान दें: जब आप अपने आप को लागू करने के लिए पाते हैं stripslashes(), तो आप पहले से ही गलत कर चुके हैं।
दान रे

0

एक ट्यूटोरियल के उद्देश्य को भ्रमित न करें, जो कि उत्पादन वातावरण में क्या किया जाना चाहिए, इसके साथ बस कुछ प्रदर्शित करना है। उदाहरण के लिए, मेरे द्वारा लिखे गए अधिकांश ट्यूटोरियल कोड में कोई त्रुटि या अपवाद नहीं है। मैं पाठक को यह याद दिलाने की कोशिश करता हूं कि कोड केवल यह प्रदर्शित करता है कि किसी विशिष्ट कार्य को कैसे किया जाए, न कि सभी संभावित परिणामों को कैसे कवर किया जाए।


3
क्षमा करें, लेकिन कभी भी कोई उदाहरण कोड PHP के साथ mySQL प्रश्नों को नहीं मिलाना चाहिए। बस यह गलत है।
रेयनोस

1
और गैर जिम्मेदाराना ढंग से।
मोनिका

-1 के लिए most tutorial code I have written has little or no error/exception checking.
यानिस

मैं ओपी की बात देख सकता हूं। गैरजिम्मेदार है, जब एक नियोक्ता एक ऐसे व्यक्ति को काम पर रखता है जिसके पास SQL ​​इंजेक्शन और इस तरह के ज्ञान की कमी है।
राफेल

मुझे लगता है कि यह दृष्टिकोण दोषपूर्ण है यदि आप कोड में सीधे टिप्पणी कहते हैं कि "उत्पादन में इसका उपयोग न करें!"। इस तरह से कॉपी / पेस्ट करने वालों के पास कोई बहाना नहीं है।
बेंजोल

-1

जब मैं PHP सीख रहा था तो मैंने इन कुछ PHP + MySQL पुस्तकों को देखा, और हाँ मुझे लगता है कि यह उस बुरे अभ्यास में योगदान देता है। लेकिन मेरे पास सहानुभूति है, क्योंकि वे भाषा सिखा रहे हैं , अच्छी प्रोग्रामिंग प्रैक्टिस नहीं। नहीं तो कहां खत्म होता?


2
लेकिन जब आप भाषा सिखा रहे हों, तब भी आपको अपने उदाहरणों में पसंदीदा एपीआई का उपयोग करना चाहिए। हमेशा एसक्यूएल प्रश्नों के पैरामीट्रिक फॉर्म का उपयोग करें, संभवतः "जैसे कभी भी एसक्यूएल के निर्माण के लिए प्रक्षेप का उपयोग करने के बारे में न सोचें। यह थोड़ा आसान लगता है, लेकिन यह सुरक्षा कमजोरियों के लिए बहुत खतरा है।"
जन हडेक

हां, अच्छे अंक। फ़ुटनोट एक अच्छा अनुस्मारक होगा, और यह ऑनलाइन ट्यूटोरियल के लिए भी जाता है। हालांकि सभी गंभीरता से, यह बहुत अच्छा होगा यदि सभी भाषाओं के पुस्तक लेखक शुरुआती पाठों में ओडब्ल्यूएएसपी से सलाह को शामिल कर सकते हैं। यहां तक ​​कि सिर्फ एक संदर्भ के रूप में। OWASP फाउंडेशन एक अच्छा काम करता है।
स्टीव रथबोन 5

@indifferentDrum: आप लोगों को अपने पैरों से गाड़ी चलाना सिखा सकते हैं, इसका मतलब यह नहीं है कि यह एक अच्छा विचार है।
मोनिका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.