2013-02-18 55 views
0

我与以下人员有同样的问题,但为他们提供的解决方案对我无效。CodeIgniter:不允许的关键字符

CodeIgniter - disallowed key characters

CodeIgniter Disallowed Key Characters

Disallowed key characters error message in Codeigniter (v2)

我得到 “不允许的主要人物形象” 时,我提交表单。

我已启用CSRF保护,并且我在表单字段名称中使用数组(即搜索[]作为名称,因为有多个选择下拉选项)。我感觉这是形式名称中的“[]”,它困扰着这种形式。

我遵循了我在上面的帖子中看到的所有建议。

  1. 我禁用CSRF暂时,
  2. 我禁用XSS暂时,
  3. 我编辑$配置[ 'permitted_uri_chars']和
  4. 我编辑其中产生该消息Input.php。

任何人有任何额外的想法可能会导致此问题的表单提交?

谢谢!

回答

0

谢谢,但我发现了另一张贴在这里隐藏方式如下(就在写这篇文章的时候底部)评论:CodeIgniter Disallowed Key Characters

的意见建议我加$海峡到出口()评论去测试。这表明我的表单字段中缺少双引号。这是一个非常复杂的表单,动态构建,有300行代码,很容易错过。

希望这个答案(和启发它的评论)帮助别人。

验证输出可以防止问题的根源,如这一个:-)

问候

1

就像我的回答here - 你只需要更新MY_Input正则表达式 - > _ clean_input_keys()允许更多的字符(如逃脱JSON或编码的HTML/XML)

只允许 '英语':!preg_match("/^[a-z0-9\:\;\.\,\?\!\@\#\$%\^\*\"\~\'+=\\\ &_\/\.\[\]-\}\{]+$/iu", $str)

让中国汉字:!preg_match("/^[a-z0-9\x{4e00}-\x{9fa5}\:\;\.\,\?\!\@\#\$%\^\*\"\~\'+=\\\ &_\/\.\[\]-\}\{]+$/iu", $str)

我的完整的工作函数如下所示:

public function _clean_input_keys($str) { 
    // NOTE: \x{4e00}-\x{9fa5} = allow chinese characters 
    // NOTE: 'i' — case insensitive 
    // NOTE: 'u' — UTF-8 mode 
    if (!preg_match("/^[a-z0-9\x{4e00}-\x{9fa5}\:\;\.\,\?\!\@\#\$%\^\*\"\~\'+=\\\ &_\/\.\[\]-\}\{]+$/iu", $str)) { 
     /** 
     * Check for Development enviroment - Non-descriptive 
     * error so show me the string that caused the problem 
     */ 
     if (is_env_dev()) { 
     var_dump($str); 
     } 

     exit('Disallowed Key Characters.'); 
    } 

    // Clean UTF-8 if supported 
    if (UTF8_ENABLED === TRUE) { 
     return $this->uni->clean_string($str); 
    } 

    return $str; 
    } 

my_helper.php

if (!function_exists('is_env_dev')) { 
    function is_env_dev() { 
    return (
     defined('ENVIRONMENT') && strtolower(ENVIRONMENT) == 'development' || 
     defined('ENVIRONMENT') && strtolower(ENVIRONMENT) == 'testing' 
    ); 
    } 
}