2011-04-19 21 views
5

संभव डुप्लिकेट:
What is SQL injection?कैसे एसक्यूएल इंजेक्शन काम करता है और कैसे मैं के खिलाफ की रक्षा करते हैं यह

मैं php कोड का एक बहुत कुछ और (भी) stackoverflow पर चारों ओर चल देख थोड़ा तारों से बच निकलना

किसी

  1. के बारे में बताएं सकते हैं कि एसक्यूएल इंजेक्शन है;
  2. बताएं कि यह आपके सर्वर, डेटा और कोड के साथ क्या कर सकता है;
  3. एक उदाहरण दें कि कैसे एक एसक्यूएल इंजेक्शन
  4. को php नमूना कोड कैसे एसक्यूएल इंजेक्शन के खिलाफ की रक्षा
+2

क्या आपने डुप्लिकेट प्रश्नों की जांच की ??? –

+0

यह नीचे मतदान किया जाएगा, जब भी मैं एसक्यूएल इंजेक्शन के बारे में पूछता हूं, हर कोई बाहर निकलता है। आपके खिलाफ रक्षा बनाने के लिए यह जानने की जरूरत है कि इसका फायदा कैसे उठाया जाए! एक तालाब को यह जानने की जरूरत है कि उसका ताला कैसे उठाया जाए ताकि वह अंततः इसे मजबूत बना सके –

+0

डुप: http://stackoverflow.com/questions/601300/what-is-sql-injection http://stackoverflow.com/questions/ 1819122/कैसे-टू-पुष्टिकरण-एसक्यूएल-इंजेक्शन http://stackoverflow.com/questions/3470415/is-this-query-injection-proof http://stackoverflow.com/questions/2216107/what-is-sql- इंजेक्शन – alexy13

उत्तर

9

मैं रूप में अच्छी तरह का विरोध नहीं कर सकता है।

एसक्यूएल इंजेक्शन "एक कोड इंजेक्शन तकनीक है जो एक अनुप्रयोग की डेटाबेस परत में होने वाली सुरक्षा भेद्यता का फायदा उठाती है"। दूसरे शब्दों में यह एक प्रश्न के अंदर उपयोगकर्ता इनपुट के रूप में SQL कोड इंजेक्शन है।

एसक्यूएल इंजेक्शन डेटा को मिटा सकता है (हटाएं, अपडेट करें, ईसीसी जोड़ें ...) और डेटाबेस की तालिकाओं को दूषित या हटाएं। मुझे एसक्यूएल इंजेक्शन स्क्रिप्ट्स में हेरफेर करने की जानकारी नहीं है।

SELECT Id FROM Users WHERE Name = $name AND Password = $password; 

उपयोगकर्ता के अंदर डाल सकते $name:

के अपने PHP स्क्रिप्ट आप (उपयोगकर्ता इनपुट के रूप में) की उम्मीद कर रहे एक उपयोगकर्ता नाम और है कि बाद में इस तरह के रूप एक प्रश्न के अंदर उपयोग किया जाता है लॉगिन रूप से एक पासवर्ड में मान लीजिए और $password जो भी वह पसंद करता है (उदाहरण के लिए <input>)।मान लें कि वह इस तरह के "1 OR 1 = 1; --" के रूप में एक नाम कहते हैं, क्वेरी अब तरह दिखेगा:

SELECT Id FROM Users WHERE Name = 1 OR 1 = 1; -- AND Password = $password; 

और फिर, ; के बाद मैं किसी अन्य क्वेरी को जोड़ने या स्क्रिप्ट लगता है कि उपयोगकर्ता नाम और पासवर्ड वास्तव में मौजूद कर सकता है ।

ध्यान दें कि -- AND Password = $password; एक SQL टिप्पणी है और इसलिए इसे अनदेखा कर दिया जाएगा।

आप PHP < 5 का उपयोग कर रहे हैं तो आप mysql_real_escape_string() के लिए देखने के लिए और इसका इस्तेमाल एक प्रश्न के अंदर यह एम्बेड करने से पहले उपयोगकर्ता इनपुट से बचने के लिए करना चाहिए।

यदि आप PHP5 + का उपयोग कर रहे हैं तो आपको PDO या mysqli एक्सटेंशन का उपयोग करना चाहिए जो इस समस्या को तैयार कथन के माध्यम से रोक सकता है।

10

मैं इस पोस्टिंग का विरोध नहीं कर सकते हैं करने के लिए।

1- एसक्यूएल इंजेक्शन को अन्य दस्तावेजों की तुलना में एक cartoon में बेहतर समझाया गया है।

2- अधिकतर यह सर्वर के लिए बहुत कुछ नहीं करता है, लेकिन केवल अंतर्निहित डेटा के लिए। नतीजे में हटाएं, सम्मिलित करें, रिकॉर्ड्स का चयन करें, ड्रॉप करें, टेबल बनाएं। (अनुमतियों आदि के आधार पर ..)

3- Examples

4- क्षमा करें मुझे PHP नहीं पता। लेकिन जब तक आप अपने दृश्य से अपनी डीबी परत को सारणी बना सकते हैं, तो आपको ठीक होना चाहिए।

+0

क्षमा करें अगर उत्तर अत्यधिक संक्षेप में है .. –

+3

बॉबी टेबल्स के लिए +1 –

11

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

"SELECT * FROM `users` WHERE `username` = '$name'"; 

सामान्य स्थिति में, यह काम करेगा। अगर हम इसे 'जैक' जमा करते हैं, तो यह जैक नाम के सभी उपयोगकर्ताओं को वापस कर देगा। हालांकि, एक उपयोगकर्ता डालता है तो कहते हैं कि " 'या 1 = 1", जिसके परिणामस्वरूप क्वेरी

"SELECT * FROM `users` WHERE `username` = '' OR 1=1"; 

होगा के बाद से 1 हमेशा 1 के बराबर होती है, और combinating खंड है या, इस हर पंक्ति, पर सच वापस आ जाएगी जो बदले में दुर्भावनापूर्ण उपयोगकर्ता को हर पंक्ति प्रदर्शित करेगा। इस तकनीक का उपयोग करके, कोई आपका संपूर्ण डेटाबेस देख सकता है। भी विचार किसी तरह कुछ प्रस्तुत करता है, तो " '; ड्रॉप तालिका users", - जिसके परिणामस्वरूप, जो

"SELECT * FROM `users` WHERE `username` = ''; DROP TABLE `users`";--"; 

कौन से दो प्रश्नों है, जिनमें से कोई कार्य नहीं करेगा, दूसरा जो पूरे उन डेटाबेस को हटाने का परिणाम होती, आपके डेटा के नुकसान में।

एसक्यूएल इंजेक्शन को रोकने के लिए सबसे अच्छी विधि तैयार बयानों का उपयोग करना है। इन के साथ, आप ऐसा है जैसे

"SELECT * FROM `users` WHERE `username` = '?'"; 

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

तैयार बयानों पर पढ़ें, जो इसे और विस्तार से समझाएगा।

+1

आपका उत्तर केवल यही था जिसने मुझे स्पष्ट रूप से एसक्यूएल इंजेक्शन को समझ लिया। धन्यवाद! –

1

वहाँ एक वहाँ (और यहाँ के अन्य भागों में) इस विषय के बारे में जानकारी के बहुत है, तो नहीं इस जवाब किसी भी तरह से एक पूरी सूची के रूप में अनुसंधान करने के लिए अपने स्वयं के ...

पर लेने के लिए और जारी रखने के लिए करते हैं
  1. समझाएं कि एसक्यूएल इंजेक्शन क्या है;
  2. बताएं कि यह आपके सर्वर, डेटा और कोड के साथ क्या कर सकता है;
  3. एक उदाहरण है कि कैसे एक एसक्यूएल इंजेक्शन प्रदर्शन करने के लिए दे दो
  4. को php नमूना कोड कैसे एसक्यूएल इंजेक्शन के खिलाफ की रक्षा
  1. एसक्यूएल इंजेक्शन वह जगह है जहाँ एक हमलावर पता चलता है कि एक इनपुट मूल्य की आपूर्ति आपके आवेदन के लिए सीधे डेटाबेस पर भेजा जा रहा है और यह महसूस करता है कि वे उस इनपुट को कस्टम एसक्यूएल कमांड के रूप में तैयार कर सकते हैं। यह किसी विशेष वर्ण (जैसे %) को टेक्स्ट फ़ील्ड में दर्ज करने और एक अजीब प्रतिक्रिया प्राप्त करने के रूप में सरल हो सकता है।

  2. यह कुछ भी कर सकता है जो आपके डेटाबेस को करने के लिए आदेश देता है। उदाहरण के लिए, यदि आपके वेब एप्लिकेशन में एप्लिकेशन के डेटाबेस के लिए डीबी स्वामी अनुमतियां हैं तो एक हमले संभावित रूप से टेबल छोड़ सकता है या पूरे डेटाबेस को भी छोड़ सकता है। या, यहां तक ​​कि सामान्य एप्लिकेशन अनुमतियों के साथ, हमला डेटा को ओवर-राइट कर सकता है या संवेदनशील डेटा पढ़ सकता है (जैसे सादे पाठ पासवर्ड यदि आपके पास हैं)।

  3. उदाहरण के लिए, यदि किसी एप्लिकेशन में एक टेक्स्ट फ़ील्ड है जहां आप उपयोगकर्ता नाम दर्ज करते हैं। यदि वह फ़ील्ड एसक्यूएल इंजेक्शन के लिए खुला है, तो हमलावर कुछ ऐसा दर्ज कर सकता है: MyName';DROP TABLE Users;-- इस उदाहरण में, हमले मैन्युअल रूप से समापन एकल कोट और सेमी-कोलन के साथ क्वेरी को समाप्त कर देता है, फिर एक और क्वेरी जोड़ता है, फिर बाद में कुछ भी टिप्पणी करता है। यदि इसके खिलाफ सुरक्षित नहीं है, तो डेटाबेस दोनों प्रश्नों को चला सकता है।

  4. यह एक मैं पर्याप्त जानकारी अद्यतन पता नहीं है, लेकिन वहाँ बहुत सारे वहाँ :)

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^