CodeIgniter:不允许的关键字符
我与以下人员有同样的问题,但为他们提供的解决方案对我无效。CodeIgniter:不允许的关键字符
CodeIgniter - disallowed key characters
CodeIgniter Disallowed Key Characters
Disallowed key characters error message in Codeigniter (v2)
我得到 “不允许的主要人物形象” 时,我提交表单。
我已启用CSRF保护,并且我在表单字段名称中使用数组(即搜索[]作为名称,因为有多个选择下拉选项)。我感觉这是形式名称中的“[]”,它困扰着这种形式。
我遵循了我在上面的帖子中看到的所有建议。
- 我禁用CSRF暂时,
- 我禁用XSS暂时,
- 我编辑$配置[ 'permitted_uri_chars']和
- 我编辑其中产生该消息Input.php。
任何人有任何额外的想法可能会导致此问题的表单提交?
谢谢!
谢谢,但我发现了另一张贴在这里隐藏方式如下(就在写这篇文章的时候底部)评论:CodeIgniter Disallowed Key Characters
的意见建议我加$海峡到出口()评论去测试。这表明我的表单字段中缺少双引号。这是一个非常复杂的表单,动态构建,有300行代码,很容易错过。
希望这个答案(和启发它的评论)帮助别人。
验证输出可以防止问题的根源,如这一个:-)
问候
就像我的回答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'
);
}
}