2013-02-18 51 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' 
    ); 
    } 
}