用户
 找回密码
 入住 CI 中国社区
搜索
查看: 16321|回复: 5
收起左侧

[已解决] Disallowed Key Characters

[复制链接]
发表于 2012-5-4 23:41:53 | 显示全部楼层 |阅读模式
大家好,在浏览使用基于 CodeIgniter 制作的网页的时候,经常会出现
Disallowed Key Characters.
我按照前面贴子里的提示修改了 system/core/Input.php 中函数 _clean_input_keys 的实现
现在提示出:Disallowed Key Characters.1336145424|7466381|28434|0|0|0
浏览器是 chrome.
每次只有清除 Cookie 后方能使用,但是它还是经常会出现
不知大家有何终极处理方法?感谢为盼~~


 楼主| 发表于 2012-5-5 13:42:31 | 显示全部楼层
CodeIgniter Disallowed Key Characters 怎么回事?
2012-04-18    文章来源:互联网    浏览次数:105     分享文章

    相信很多人遇到 Disallowed Key Characters 这样的问题,即使是在访问 CSDN 的时候,因为 CSDN 的那部分网页是用 CI 写的,这个问题就出在 CI 的处理提交字符串的类上面。即使只是输入域名。没什么特殊字符,这问题还是如影随形,为什么呢?

    这和 CI 的字符串处理类设计有关,是这样的,通过get、post方法提交的字符串,CI 都交给 system/core/Input.php 这个类去处理,那很多人就问了,看url并没有特殊符号,为什么也报这样的错误,因为你忽略了一点,cookie 和 session 传输的字符串,也是由这个类统一处理的,也就是说,get、post、cookie、session 的数据都是由这个类处理的,问题往往也出现在 cookie 和 session 上面,所以网上有很多人提供方法就是,清除一下缓存和 cookie ,确实就没问题了,但是隔一段时间就又有问题了,因为新生成的 cookie 里面含有不被匹配通过的字符串,该怎么解决呢?

    解铃还需系铃人,既然问题出现在 Input.php 这个类上面,就修改他就好,把 _clean_input_keys 方法:


  • function _clean_input_keys($str)
  • {
  •     if ( ! preg_match("/^[a-z0-9:_\/-]+$/i", $str))
  •     {
  •         exit('Disallowed Key Characters.');
  •     }
  •     // Clean UTF-8 if supported
  •     if (UTF8_ENABLED === TRUE)
  •     {
  •         $str = $this->uni->clean_string($str);
  •     }
  •     return $str;
  • }



    改为:


  • function _clean_input_keys($str)
  • {
  •     /*if ( ! preg_match("/^[a-z0-9:_\/-]+$/i", $str))
  •     {
  •         exit('Disallowed Key Characters.');
  •     }*/
  •     $config = &get_config('config');  
  •     if (!emptyempty($config['permitted_uri_chars']))
  •     {
  •         if ( ! preg_match("/^[".$config['permitted_uri_chars']."]+$/i", rawurlencode($str)))   
  •         {   
  •             exit('Disallowed Key Characters.');   
  •         }  
  •     }
  •     // Clean UTF-8 if supported
  •     if (UTF8_ENABLED === TRUE)
  •     {
  •         $str = $this->uni->clean_string($str);
  •     }
  •     return $str;
  • }



    然后把 config/config.php 里面的:


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



    改为:


  • $config['permitted_uri_chars'] = '';



    即可

    自此问题解决,不懂的朋友可以理解一下上面这几段代码,希望有所帮助。



发表于 2012-5-5 18:35:13 | 显示全部楼层
键名使用非法字符,本身就不是规范的
发表于 2012-7-3 17:38:13 | 显示全部楼层
未解决!等待解决办法
发表于 2012-7-4 11:08:45 | 显示全部楼层
transition 发表于 2012-7-3 17:38
未解决!等待解决办法

就是你的 cookie 有非法字符,新版里你需要看一下安全类,而不是 input 类
发表于 2013-1-23 11:02:22 | 显示全部楼层
Hex 发表于 2012-7-4 11:08
就是你的 cookie 有非法字符,新版里你需要看一下安全类,而不是 input 类

修改了下config里的正则,多支持了些东西。之前打印出cookie,的确有很多意外的KEY值。有不少是 统计脚本造成的。

本版积分规则