如何在 CodeIgniter URL 中允许 URI 编码字符?

Posted

技术标签:

【中文标题】如何在 CodeIgniter URL 中允许 URI 编码字符?【英文标题】:How do you allow URI encoded characters in CodeIgniter URLs? 【发布时间】:2012-05-14 10:55:35 【问题描述】:

我正在使用CodeIgniter 1.7.1。我允许的 URI 字符设置如下:

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

当我输入http://website.com/index.php/controller/method/test%21 之类的地址时,页面无法加载并显示错误:

代码点火器:遇到错误您提交的 URI 有 不允许使用的字符。

我不明白。允许%20(空格),但不允许%21(感叹号)。

【问题讨论】:

允许字符列表中有感叹号吗?我认为浏览器将 %21 解释为 !,所以当 CodeIgniter 解析它时,它会看到“!”,而不是“%21” @Goldentoa11 我是否必须将所有可能的标点符号以其原始形式添加到列表中?我是否应该只允许所有角色避免编写庞大的列表?此配置文件中的 cmets 表示“除非您知道自己在做什么,否则不允许使用所有字符”。那么如果我允许所有字符,会打开哪些安全漏洞? 根据您的第一个问题,我认为您必须这样做。根据您的第二个问题,如果 CI 说不这样做,我会按照它所说的去做,除非您了解幕后发生的事情,而我不了解。根据你的第三个问题,我不知道会打开什么样的洞。 【参考方案1】:

%21 在 codeigniter 中解析为 !。所以codeigniter不支持这个请!进入允许的 uri 配置文件:

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

【讨论】:

url 中的 (+) 怎么样 我尝试像这样添加它,它在 url $config['permitted_uri_chars'] = 'a-z 0-9~%.:;,_^$-+'; 中给了我不允许的字符 CI 3 应该在哪里添加上述行?【参考方案2】:

尝试用这个转义它,应该可以工作

\\+

【讨论】:

以上是关于如何在 CodeIgniter URL 中允许 URI 编码字符?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 codeigniter form_validation 类中允许空值或数值?

检查 codeigniter 文件上传中允许的类型

如何在 Azure 中允许 URL 编码的路径段

如何在 WebView Flutter 中允许 mailto 和 tel URL 方案?

如何在 Elastic Beanstalk 负载均衡器环境中允许编码斜杠

如何在[PHP]中允许跨域[重复]