2010-11-13 14 views
5

में यूआरएल में किसी भी चरित्र को अनुमति देना मैं कोडइग्निटर PHP फ्रेमवर्क का उपयोग कर रहा हूं। मैं जे एस का उपयोग गतिशील रूप से एक PHP पृष्ठ लोड करने:कोडइग्निटर

http://192.168.0.81/index.php/controller/method/dude%27s%20face 
An Error Was Encountered 
The URI you submitted has disallowed characters. 

यह पूरी तरह झूठ है, क्योंकि विचाराधीन URL किसी भी अनुमति नहीं वर्ण नहीं था:

$('someIFrame').writeAttribute(
    'src', 
    '/index.php/controller/method/' + 
    escape(userGeneratedString) 
); 

जब मैं इस भाग गया, CodeIgniter मुझे इस त्रुटि दे दी है । मेरे कॉन्फ़िग फ़ाइल सभी पात्रों जो URL में वर्तमान की अनुमति देता है:

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_()@\-'; 

तो मैं निराश हो गया और बस सभी पात्रों त्रुटि को रोकने के लिए अनुमति दी।

// Leave blank to allow all characters -- but only if you are insane. 
// DO NOT CHANGE THIS UNLESS YOU FULLY UNDERSTAND THE REPERCUSSIONS!! 
//$config['permitted_uri_chars'] = 'a-z 0-9~%.:_()@\-'; 
$config['permitted_uri_chars'] = ''; 

इस पंक्ति के ऊपर चेतावनी संदेश डरावना लगता है। सभी पात्रों को अनुमति देकर संभवतः गलत क्या हो सकता है? क्या मैं हैक हो जाऊंगा?

+1

@thisMayham के बाद से ** इसका अर्थ है ** कि आप प्रतिक्रिया देने के बारे में परवाह नहीं है। वही नहीं, हाँ? ;) @ जोजो आप उत्तर के बगल में हरे रंग की चेकलाइन पर क्लिक करके जवाब स्वीकार कर सकते हैं - इसका मतलब है कि उस विशेष उत्तर ने आपकी समस्या को हल करने में मदद की है। यह उत्तर देने वाले और पूछने वाले दोनों को उनके प्रयास के लिए एक छोटा सा इनाम देता है, और हल के रूप में प्रश्न को चिह्नित करता है। –

+0

[security.se] पर भी देखें: [** URL में सभी वर्णों को अनुमति देना क्यों खतरनाक है? **] (http://security.stackexchange.com/q/133511/12139) – unor

उत्तर

6

कोडिनेटर में यूआरएल urldecoded हैं, इसलिए %27' पर अनुवाद करता है जो आपकी अनुमति सूची सूची पर नहीं था और इसलिए त्रुटि उत्पन्न हुई। इसलिए आपको वर्णों को डीकोड करने की अनुमति देने की आवश्यकता है। दूसरे शब्दों में, कोड कोडिटर द्वारा आपको %27 देखता है, यह पहले से ही ' में डीकोड किया गया है।

Source