दिलचस्प पोस्ट
ग्रहण: बाहरी जार के साथ निष्पादन योग्य जार कैसे बनाया जाए? जावा का एसएसएलएसॉक एक संस्करण 2 ग्राहक हैलो क्यों भेजता है? पायथन :: ऑपरेटर में स्ट्रिंग चालू करें IFRAME से वर्तमान यूआरएल प्राप्त करें एसएसआरएस 2008 आर 2 – एसएसआरएस 2012 – रिपोर्ट वीवर: सफारी और क्रोम में रिपोर्ट रिक्त हैं जावा / स्विंग: कम प्रोफाइल बटन की ऊंचाई? पायथन में datetime.time को एन सेकेंड जोड़ने का मानक तरीका क्या है? HttpContext का उपयोग करना। WebApi में मौजूद है क्योंकि async के खतरनाक है बिना सीएक्स उपयोग और रैम उपयोग कैसे करें? virtualenv के बजाय वैश्विक साइट-पैकेज में स्थापित करना जावा में एक स्ट्रिंग सॉर्ट करें कुछ कोड को प्रत्येक एन सेकेंड चलाएं कैसे खिड़कियों से कुकीज़ को हटाने के लिए? "मल्टीकोर" असेंबली भाषा क्या दिखती है? क्या यह हमेशा यूटीसी में समय स्टोर करने का एक अच्छा विचार है या क्या ऐसा मामला है जहां स्थानीय समय में भंडारण करना बेहतर है?

क्या mysql_real_escape_string () टूटा हुआ है?

कुछ लोगों का मानना ​​है कि mysql_real_escape_string() में कुछ खामियां हैं और ठीक से उपयोग होने पर भी आपकी क्वेरी को सुरक्षित नहीं रख सकते।
एक सबूत के रूप में कुछ जीवाश्म लेख लाना

तो, सवाल यह है कि: mysql [i] _real escape_string () पूरी तरह अस्वीकार्य है?
या अपने स्वयं के तैयार बयान बनाने के लिए इस फ़ंक्शन का उपयोग करना अभी भी संभव है?

सबकोड के साथ, कृपया

वेब के समाधान से एकत्रित समाधान "क्या mysql_real_escape_string () टूटा हुआ है?"

MySQL के सी एपीआई फ़ंक्शन से mysql_real_escape_string विवरण :

यदि आपको कनेक्शन के चरित्र सेट को बदलना है, तो आपको SET NAMES (या SET CHARACTER SET ) कथन निष्पादित करने के बजाय mysql_set_character_set() फ़ंक्शन का उपयोग करना चाहिए। mysql_set_character_set() SET NAMES तरह काम करता है लेकिन यह mysql_real_escape_string() द्वारा उपयोग किए गए वर्ण सेट को भी प्रभावित करता है, जो SET NAMES नहीं करता।

तो mysql_set_charset को बदलने के लिए SET NAMES / SET CHARACTER SET लेकिन PHP का mysql_set_charset का उपयोग न करें, जो कि MySQL के mysql_set_character_set ( /ext/mysql/php_mysql.c का स्रोत कोड देखें) के समकक्ष है

हालांकि, लीगेसी कोड और पुरानी सर्वर संस्करणों के साथ ही भेद्यता को केवल तभी शुरू किया जा सकता है अगर डाटाबेस कनेक्शन का चरित्र सेट एक-बाइट से लैटिन -1 की तरह एक बहुबाइव से बदल जाता है जो कि मान 0x5c (ASCII एकल उद्धरण ) एक multibyte चरित्र के दूसरे या बाद के बाइट में।

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

लेकिन सबसे अच्छा अभ्यास अभी भी नवीनतम सर्वर संस्करण को चलाने के लिए है, चरित्र सेट बदलने के लिए सही इंटरफ़ेस का उपयोग करें, और तैयार क्वेरी का उपयोग करें ताकि आप सामान से बचने के लिए न भूल जाएं

टिप्पणियों में mySQL 5.0.22 (24 मई 2006) में एक बगफिक्स के लिए एक लिंक है, जहां इसे संबोधित किया गया है।