我最近将CI从1.7升级到2.0。在我开始接收CI的
之后不允许使用关键字符
错误。
然后我允许接受所有字符以查看错误是否会消失。
$config['permitted_uri_chars'] = '';
然而,这并没有改变任何事情
我也启用了查询字符串
$config['enable_query_strings'] = TRUE;
当我允许接受所有字符时,我只是不知道为什么我得到了不允许的字符错误。
这是一个url示例,我将获得不允许的关键字符错误:
http://localhost/myapp/index.php??c=user&m=login
但是,如果我要删除其中一个'?'它的工作原理
http://localhost/myapp/index.php?c=user&m=login
我有一个包含以下内容的htaccess文件:
RewriteEngine on
RewriteRule (.*)/index.php $1/ [L]
任何帮助?
答案 0 :(得分:2)
看起来CodeIgniter会对GET / POST /和cookie数据键名进行单独检查,并对其进行验证:
/^[a-z0-9:_\/-]+$/i
请参阅:https://bitbucket.org/ellislab/codeigniter/src/c2dad3edb148/system/core/Input.php#cl-537
除了编辑/子类化Input.php之外,我没有看到一种简单的方法来禁用此检查。不管怎么说,你最好不要使用没有奇怪符号的键。
答案 1 :(得分:1)
正如代码评论中所述,你正在做的事情是灰心丧气
| As a security measure you are STRONGLY encouraged to restrict URLs to
| as few characters as possible. By default only these are allowed: 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!!
尽管如此,可能的解决方案是清除您的缓存,尤其是 Cookie ,例如,您可以在this中看到关于CI论坛的主题(以及在较小程度上,您只是在谷歌上搜索其他资源)
编辑:发布后我看到你编辑了你的问题,并添加了重要的细节。正如其他用户所建议的那样,您需要检查输入类以破解codeigniter如何实现自己的POST和GET处理。
特别是,我正在寻找库/ input.php中的function _clean_input_keys($str)
,并在那里更改正则表达式