2010-11-13 24 views
5

我正在使用CodeIgniter PHP框架。我用JS動態加載一個PHP頁面:允許CodeIgniter中的URL中的任何字符

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

當我跑了這一點,笨給了我這個錯誤:

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

這是完全不符合事實,因爲有問題的URL不包含任何禁用的字符。我的配置文件允許存在於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自**這意味着**,你不關心給予反饋。不一樣,是嗎? ;)@JoJo您可以通過點擊答案旁邊的綠色支票大綱來接受答案 - 這意味着特定的答案有助於解決您的問題。這給回答者和提問者提供了小小的回報,並將問題標記爲已解決。 – 2010-11-13 05:56:39

+0

請參閱[security.se]:[**爲什麼允許URL中的所有字符是危險的?**](http://security.stackexchange.com/q/133511/12139) – unor 2016-08-14 09:20:24

回答

6

在codeigniter中的網址是urldecoded,所以%27轉換爲',它不在您允許的字符列表中,因此觸發了錯誤。所以你需要允許字符一旦解碼。 換句話說,在codeigniter看到你的時候%27,它已經被解碼爲'

Source

相關問題