2015-10-26 90 views
2

我目前正在學習框架「CodeIgniter」。但是我的表單驗證有問題。首先,讓我告訴你我的觀點:CodeIgniter形式的XSS過濾

<form method="post" action="connexion"> 
    <label for="pseudo">Pseudo : </label> 
    <input type="text" name="pseudo" value="" /> 

    <label for="mdp">Mot de passe :</label> 
    <input type="password" name="mdp" value="" /> 

    <input type="submit" value="Envoyer" /></form> 

我的控制器:

public function connexion() 
{ 
    $this->load->library('form_validation'); 

    $this->form_validation->set_rules('pseudo', '"user name"', 'trim|required|min_length[5]|max_length[52]|alpha_dash|encode_php_tags|xss_clean'); 
    $this->form_validation->set_rules('mdp', '"password"',  'trim|required|min_length[5]|max_length[52]|alpha_dash|encode_php_tags|xss_clean'); 

    if($this->form_validation->run()) 
    { 
     $this->load->view('connexion_ok'); 
    } 
    else 
    { 
     $this->load->view('form'); 
    } 
} 

當我刪除我的控制器中的「xss_clean」過濾器在set_rules(),它完美的作品,形式有效。如果「xss_clean」存在,它不起作用,它會進入else。我在輸入中不使用特殊字符,只使用字母。

在我把這個設置爲true的設置中:$ config ['global_xss_filtering'] = TRUE;

我在某處讀到「xss_clean」過濾器沒用。我還能使用什麼?也許傭工或其他什麼? 謝謝

+0

什麼不工作? –

+0

驗證!它在其他地方 –

+0

默認情況下,XSS保護功能處於關閉狀態。要打開此功能,只需將全局配置(即system/application/config/config.php)設置爲'$ config ['global_xss_filtering'] = TRUE;' – Linus

回答

6

首先設置$config['global_xss_filtering'] = FALSE;你不需要或不需要這個。此配置設置已正式棄用。它可能會在未來消失。

其次,如果您使用的是版本3.0.x,則從您的驗證規則中刪除'xss_clean'。它不在官方支持的list of form validation rules上。

當您使用Input Class從POST,GET,COOKIE或SERVER獲取數據時,您可以使用XSS過濾的地方。大多數輸入方法都有第二個參數,可以通過xss_clean()運行數據。示例:$this->input->post('some_data', TRUE);將獲得值$_POST['some_data']並通過xss_clean()運行它。如果第二個參數爲FALSE(或省略)xss_clean()將不會被使用。

3

我不同意DFriend的回答。

CodeIgniter documentation

XSS逃逸應在輸出來進行,而不是輸入!

於是,他提出的解決方案實際上會做同樣的過時的全局配置$config['global_xss_filtering'] = TRUE;的,與添加更多的代碼和工作手冊添加一個額外的bollean參數每個$this->input->post的差異。

正確的方法是使用您的看法set_value

<input type="password" name="mdp" value="<?=set_value('mdp')?>" />

This function filters XSS vulnerabilities by default:

SET_VALUE($領域,$默認= ''[,$ html_escape = TRUE] ])