CodeIgniter表单上的XSS过滤



我目前正在学习框架"CodeIgniter"。但我有一个问题,我的表单验证。首先,让我告诉你我的观点:

<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>

My controller:

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');
    }
}

当我在set_rules()中删除控制器中的"xss_clean"过滤器时,它工作得很好,表单有效。如果存在"xss_clean",则它不起作用,它将放在else中。我在输入中不使用特殊字符,只使用字母。

$config['global_xss_filtering'] = true;

我在某处读到"xss_clean"过滤器是无用的。我还能用什么?也许是帮手或者别的什么?谢谢你

首先设置$config['global_xss_filtering'] = FALSE;你不需要也不想一直开着这个。此配置设置已正式弃用。它将来可能会消失。

第二,如果您使用的是3.0版本。然后从验证规则中删除' xss_clean '。它不在官方支持的表单验证规则列表中。

可以使用XSS过滤的地方是当使用Input类从POST, GET, COOKIE或SERVER获取数据时。大多数输入法都有第二个参数,允许通过xss_clean()运行数据。示例:$this->input->post('some_data', TRUE);将获取"$_POST['some_data']"的值,并通过xss_clean()运行。如果第二个参数为FALSE(或省略),则不会使用xss_clean()

我不同意DFriend的回答。

每个CodeIgniter文档:

XSS转义应该在输出上执行,而不是在输入上!

因此,他提出的解决方案实际上与已弃用的全局配置$config['global_xss_filtering'] = TRUE;相同,不同之处是添加了更多的代码和手动工作来为每个$this->input->post添加额外的bollean参数。

正确的方法是在视图上使用set_value:

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

此函数默认过滤XSS漏洞:

set_value(字段(,默认美元= " [$ html_escape =真正]])

最新更新