php - mysql_real_escape_string वीएस addlashes




(4)

क्या कोई PHP मैनुअल से इन 2 कार्यों के बीच मतभेदों पर कुछ प्रकाश डाल सकता है

जोड़ता है: डेटाबेस क्वेरीज में उद्धृत होने वाले वर्णों से पहले बैकस्लाश के साथ एक स्ट्रिंग देता है। ये वर्ण सिंगल कोट ('), डबल कोट ("), बैकस्लैश () और एनयूएल (न्यूल बाइट) हैं।

mysql_real_escape_string: mysql_real_escape_string () MySQL की लाइब्रेरी फ़ंक्शन mysql_real_escape_string को कॉल करता है, जो निम्न वर्णों में बैकस्लैश को प्रीपेड करता है: \ x00, \ n, \ r, \, ', "और \ x1a।

जो मैं मुख्य अंतर इकट्ठा करता हूं वह \ x00 है, \ n \ r \ x1a जो जोड़ों से बच नहीं आता है, क्या आप मुझे बता सकते हैं कि इसका महत्व क्या है?

धन्यवाद


mysql_real_escape_string () खाते में वर्तमान कनेक्शन द्वारा उपयोग किए गए वर्ण सेट को भी ध्यान में रखता है।

PHP फ़ंक्शन mysql_real_escape_string () एक ही नाम के MySQL C API फ़ंक्शन का उपयोग करता है: http://dev.mysql.com/doc/refman/5.1/en/mysql-real-escape-string.html

नोटबुक () वर्डस mysql_real_escape_string () वर्जन PHP सुरक्षा विशेषज्ञ क्रिस शिफलेट द्वारा भी एक प्रदर्शन के लिए पढ़ें कि आप एसक्यूएल इंजेक्शन शोषण प्राप्त कर सकते हैं भले ही आप addlashes () का उपयोग करते हैं।

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

इसके अलावा कुछ कोने के मामले भी हो सकते हैं जहां आप गतिशील स्ट्रिंग मान के लिए क्वेरी पैरामीटर का उपयोग नहीं कर सकते हैं, जैसे कि पूर्ण खोज खोज में आपके खोज पैटर्न।


आप जो उद्धरण देते हैं वह शायद डॉक्टर से है, लेकिन जहां तक ​​मुझे पता है कि यह जरूरी नहीं है।

addslashes में आमतौर पर परेशान होने वाले पात्रों को स्लेश जोड़ता है। mysql_real_escape_string जो कुछ भी MySQL से बचने की आवश्यकता है से बच निकलता है। यह addslashes देखभाल के मुकाबले कम या ज्यादा वर्ण हो सकता है।

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

मेरा मानना ​​है कि आपको हमेशा अपने डेटा प्रदाता के बचने के बजाय addslashes का उपयोग करना चाहिए, क्योंकि आपके द्वारा उपयोग किए जाने वाले उद्देश्य के लिए addslashes या तो बहुत अधिक काम नहीं कर सकते हैं या पर्याप्त काम नहीं कर सकते हैं। दूसरी ओर, mysql_real_escape_string जानता है कि किसी क्वेरी में एम्बेड करने के लिए स्ट्रिंग तैयार करने के लिए क्या करना है। यहां तक ​​कि यदि चश्मा सामान से बचने के तरीके के बारे में बदलते हैं और अचानक यह बैकस्लाश नहीं है कि आपको अब और उपयोग करना चाहिए, तो आपका कोड अभी भी काम करेगा क्योंकि mysql_real_escape_string इसके बारे में पता होगा।


पीडीओ का उपयोग करके क्वियर "ies तैयार करने के बजाय आप इसका उपयोग कर सकते हैं जबकि आपका एप्लिकेशन MySQLi (सावधान!" I "MySQL पर और" का उपयोग करता है)

$nick = $connect->real_escape_string($nick);
$nick= addcslashes($nick, '%_');

$pass = $connect->real_escape_string($pass);
$pass = addcslashes($pass, '%_');

mysql_escape_string और mysql_real_escape_string साथ इतिहास का एक गुच्छा था। वे दोनों "सामान्य" भागने वाली तंत्र प्रदान करने के प्रयास थे जो एसक्यूएल इंजेक्शन हमलों की संभावना को कम करेगा।

mysql_real_escape_string और addslashes ठीक है, अगर वे वास्तव में आपको चाहिए - लेकिन वे शायद नहीं हैं।

@afrazier कहते हैं, आपको तैयार बयान का उपयोग करना चाहिए





mysql