在CodeIgniter中允许URL中的任何字符

5
我正在使用CodeIgniter PHP框架。我使用JS动态加载PHP页面:
$('someIFrame').writeAttribute(
   'src',
   '/index.php/controller/method/' +
   escape(userGeneratedString)
);

当我运行此代码时,CodeIgniter 给了我这个错误提示:
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'] = '';

这行警告信息听起来很吓人。允许所有字符可能会出什么问题?我会被黑客攻击吗?

请参阅[security.se]上的内容:为什么允许URL中有所有字符是危险的? - unor
1个回答

6
在CodeIgniter中,URL是urldecoded的,所以%27被转换为',而这个字符不在您允许的字符列表中,因此触发了错误。因此,您需要允许一次解码后的字符。 换句话说,在CodeIgniter看到%27时,它已经被解码成了'

来源


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接