2010-01-07 6 views
11

मैंने उपयोगकर्ता को टैग सबमिट किए हैं जो किसी भी प्रकार (वैध) यूटीएफ -8 स्ट्रिंग हो सकते हैं। मैं जानना चाहता हूं कि urlencode() के माध्यम से उन्हें चलाने के द्वारा उन्हें URL में मर्दाना शामिल करना सुरक्षित है या नहीं।PHP: यूआरएल में वैध यूटीएफ -8 स्ट्रिंग्स को अनुमति देने के लिए urlencode() एक सुरक्षित तरीका है?

दूसरे शब्दों में, urlencode() वैध यूटीएफ -8 तारों के लिए उपयोग करने के लिए सुरक्षित है? (मान्य द्वारा मेरा मतलब आईडी उन्हें पहले से ही UTF-8 के लिए मजबूर एन्कोड किया है)

+0

यहां देखने का प्रयास करें ... http://php.net/manual/en/function.urlencode.php पृष्ठ पर कुछ चर्चा है "gmx dot net पर dominik dot hofer" द्वारा पोस्ट को देखकर यह – DeveloperChris

+0

मदद कर सकता है डोमिनिक का मुद्दा (http://www.php.net/manual/en/function.urlencode.php#88712) वास्तव में इस तथ्य के साथ प्रतीत होता है कि परिणामी स्ट्रिंग जावास्क्रिप्ट/एचटीएमएल के लिए सुरक्षित नहीं थी। जो ज़ेनक्रॉस के लिए एक अच्छा सवाल लाता है: जब आपका मतलब "सुरक्षित" होता है, तो क्या आपका मतलब है "यूआरएल सुरक्षित", या "यूआरएल सुरक्षित और एचटीएमएल सुरक्षित"? क्योंकि अगर आप एचटीएमएल सुरक्षित चाहते हैं, तो आपको urlencode के अलावा htmlentities() का उपयोग करने की आवश्यकता होगी। –

उत्तर

17

urlencode एक विशिष्ट वर्ण एन्कोडिंग पर निर्भर नहीं करता। यह केवल बाइट्स को देखता है, उन्हें एएससीआईआई अक्षरों के रूप में व्याख्या करता है और किसी भी बाइट को प्रतिस्थापित करता है जिसे या तो ASCII (0x80-0xFF) में अनुमति नहीं है या किसी URL में सादे में अनुमति नहीं है।

अब आपके प्रश्न पर: हाँ, urlencode का उपयोग करके किसी भी वर्ण एन्कोडिंग में सुरक्षित रूप से उपयोग किए जाने के लिए किसी भी स्ट्रिंग को एन्कोड करता है - लेकिन केवल यूआरएल क्वेरी में! urlencodeapplication/x-www-form-urlencoded कि कैसे अंतरिक्ष इनकोडिंग में "सामान्य" percent encoding से अलग है के अनुसार इनपुट स्वरूपों क्योंकि: आवेदन में/x-www फार्म-urlencoded रिक्त स्थान + ने ले ली है, जबकि "सामान्य" प्रतिशत एन्कोडिंग उनके द्वारा की जगह %20

यदि आप "सामान्य" प्रतिशत एन्कोडिंग rawurlencode का उपयोग करना चाहते हैं।

0

हाँ, urlencode() किसी भी इनपुट स्ट्रिंग के बाहर एक सुरक्षित URL स्ट्रिंग बनाना चाहिए। जब तक कि यूआरएल (folder/file/htaccess) पर मैपिंग कर रहा है, तब तक इसमें फंकी वर्ण नहीं हैं। जब भी कोई उपयोगकर्ता जहां वे कुछ अजीब पोस्टिंग जा सकता से सामान प्रतिबंध लगाया मैं इस समारोह प्यार:

utf8_encode()

+0

+1। अब मैं आपका जवाब पढ़ूंगा ... – Xeoncross

+1

क्षमा करें, utf8_encode() एक सुरक्षित कार्य नहीं है। यह केवल सुरक्षित तारों के लिए उपयोग किया जाना है (जो उपयोगकर्ता इनपुट नहीं है)। – Xeoncross

+0

हू ... उसे एहसास नहीं हुआ। धन्यवाद! अभी मैं एक वर्डप्रेस डेटाबेस से आने वाले डेटा को साफ करने के लिए उस फ़ंक्शन का उपयोग कर रहा हूं। यह एकमात्र ऐसा कार्य है जो मैंने पाया है कि उन भयानक पात्रों को बाहर ले जाएगा जो वर्डप्रेस वहां रखता है (जैसे डबल स्पेस, स्टाइल कोट्स)। क्या ऐसा करने के लिए इससे अच्छा तरीका है? –

0

बस सुरक्षित पक्ष पर पूरी तरह से रहने के लिए, मैं पहले न्यूलाइन हटा दूंगा। वे खुद में खतरनाक नहीं हैं, लेकिन वे अन्य भेद्यताओं का शोषण करने में पत्थरों को बढ़ा सकते हैं।

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