दिलचस्प पोस्ट
पहचान कॉलम मूल्य अचानक 1001 में एसक्यूएल सर्वर पर कूदता है Bitwise shift (bit-shift) ऑपरेटरों और वे कैसे काम करते हैं? php – एक फाइल डाउनलोड करने के लिए मजबूर कैसे करें? अंतःप्रक्रम संचार लूप के लिए एक जावास्क्रिप्ट के अंदर एसिंक्रोनस प्रोसेस Google क्रोम में टूलबार कैसे बनाऊं? "होने के कारण: java.lang.VerifyError:" यूआईडीवाइस वर्तमान डिवाइस मॉडल संभव मूल्य जावास्क्रिप्ट के साथ छवि का आकार बदलें मैं एक ऐसे विशिष्ट गुण को कैसे लागू कर सकता हूं जो मेरे पास नहीं है, जिसके लिए मैं खुद नहीं हूं? कैसे nth jQuery तत्व प्राप्त करने के लिए Asp.net MVC में LabelFor हेल्पर का उपयोग किए बिना DisplayName विशेषता प्राप्त करें अपने कंटेनर की शेष चौड़ाई को भरने के लिए शैली इनपुट तत्व कैसे jQuery के संस्करण लोड किया जाता है की जांच करने के लिए? क्या मैं फ्लोटिंग प्वाइंट मुद्दे के लिए PHP php.ini परिशुद्धता समाधान पर भरोसा कर सकता हूं

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

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

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

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

Solutions Collecting From Web of "क्या 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) में एक बगफिक्स के लिए एक लिंक है, जहां इसे संबोधित किया गया है।