आगे के शोध से, मैंने पाया है:
http://dev.mysql.com/doc/refman/5.1/en/news-5-1-11.html
सुरक्षा फिक्स:
बहु-बाइट एन्कोडिंग प्रसंस्करण में एक एसक्यूएल-इंजेक्शन सुरक्षा छेद पाया गया है। बग सर्वर में था, गलत तरीके से स्ट्रिंग को पार्स करने से mysql_real_escape_string () C API फ़ंक्शन के साथ बच गया।
यह जोखिम जोश बर्कस और टॉम लेन द्वारा OSDB कंसोर्टियम के अंतर-परियोजना सुरक्षा सहयोग के हिस्से के रूप में खोजा और रिपोर्ट किया गया था। SQL इंजेक्शन के बारे में अधिक जानकारी के लिए, कृपया निम्न पाठ देखें।
चर्चा। बहु-बाइट एन्कोडिंग प्रसंस्करण में एक SQL इंजेक्शन सुरक्षा छेद पाया गया है। SQL इंजेक्शन सुरक्षा छेद में ऐसी स्थिति शामिल हो सकती है जब उपयोगकर्ता किसी डेटाबेस में डाले जाने के लिए डेटा की आपूर्ति करता है, तो उपयोगकर्ता SQL कथन को उस डेटा में इंजेक्ट कर सकता है जिसे सर्वर निष्पादित करेगा। इस भेद्यता के संबंध में, जब चरित्र सेट-अनजान भागने का उपयोग किया जाता है (उदाहरण के लिए, PHP में, अतिरिक्त), कुछ मल्टी-बाइट कैरेक्टर सेट (उदाहरण के लिए, एसजेआईएस, बीआईजी 5 और जीबीके) में भागने को बायपास करना संभव है। परिणामस्वरूप, SQLL इंजेक्शन हमलों को रोकने के लिए Addlashes () जैसे एक फ़ंक्शन सक्षम नहीं है। सर्वर साइड पर इसे ठीक करना असंभव है। सबसे अच्छा समाधान ऐसे mysql_real_escape_string () फ़ंक्शन द्वारा ऑफ़र किए गए वर्ण सेट-अवेयरिंग एस्केप का उपयोग करने के लिए है।
हालाँकि, एक बग का पता चला कि कैसे MySQL सर्वर mysql_real_escape_string () के आउटपुट को पार्स करता है। परिणामस्वरूप, जब वर्ण सेट-जागरूक फ़ंक्शन mysql_real_escape_string () का उपयोग किया गया था, तब भी SQL इंजेक्शन संभव था। इस बग को ठीक कर दिया गया है।
समाधान। यदि आप MySQL को ऐसे संस्करण में अपग्रेड करने में असमर्थ हैं, जिसमें mysql_real_escape_string () पार्सिंग में बग के लिए फ़िक्सेस शामिल हैं, लेकिन MySQL 5.0.1 या उच्चतर चलाएं, तो आप एक वर्कअराउंड के रूप में NO_BACKSLASH_SCAPES SQL मोड का उपयोग कर सकते हैं। (यह मोड MySQL 5.0.1 में पेश किया गया था।) NO_BACKSLASH_ESCAPES SQL मानक संगतता मोड सक्षम करता है, जहां बैकस्लैश को एक विशेष वर्ण नहीं माना जाता है। इसका परिणाम यह होगा कि प्रश्न विफल होंगे।
वर्तमान कनेक्शन के लिए इस मोड को सेट करने के लिए, निम्न एसक्यूएल विवरण दर्ज करें:
SET sql_mode='NO_BACKSLASH_ESCAPES';
आप सभी ग्राहकों के लिए विश्व स्तर पर भी मोड सेट कर सकते हैं:
SET GLOBAL sql_mode='NO_BACKSLASH_ESCAPES';
सर्वर-कमांड विकल्प -sql-mode = NO_BACKSLASH_ESCAPES का उपयोग करके या सर्वर विकल्प फ़ाइल में sql- मोड = NO_BACKSLASH_ESCAPES सेट करके सर्वर शुरू होने पर यह SQL मोड भी स्वचालित रूप से सक्षम किया जा सकता है (उदाहरण के लिए, my.cnf या my.ini , आपके सिस्टम पर निर्भर करता है)। (बग # 8378, CVE-2006-2753)
बग # 8303 भी देखें।