codeigniter 2以及如何为TinyMCE禁用xss

bne*_*jax 3 php codeigniter tinymce codeigniter-2

香港专业教育学院搜索了包括stackoverflow在内的每个站点.

我已经全局启用了XSS,并且我使用了TinyMCE.在那些页面上,我希望TinyMCE部分没有启用XSS.

在阅读了大约40页后,他们都说要做以下事情:

$tiny_mce = $this->input->post('note'); // xss filtering off
Run Code Online (Sandbox Code Playgroud)

要么

$tiny_mce = $this->input->post('note', FALSE); // xss filtering off
Run Code Online (Sandbox Code Playgroud)

我试过了两个,这是我的模特:

public function edit($id) {

          $tiny_mce = $this->input->post('note'); // xss filtering off
          $userId = $this->ion_auth->get_user_id();
          $data = array(
                        'note' => $tiny_mce
                        ,'postedBy' => $userId);
          $this->db->where('id', $id);
          $this->db->update('company_notes', $data);

}
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么它不工作?任何帮助都会很棒!我真的不想全局关闭XSS,所以我希望采用"每个基础"的方法.

编辑 我刚试过

public function edit($id) {
          $this->config->set_item('global_xss_filtering', FALSE);
          $tiny_mce = $this->input->post('note'); // xss filtering off
          $userId = $this->ion_auth->get_user_id();
          $data = array(
                        'note' => $tiny_mce
                        ,'postedBy' => $userId);
          $this->db->where('id', $id);
          $this->db->update('company_notes', $data);

}
Run Code Online (Sandbox Code Playgroud)

但那也行不通.

Has*_*ami 7

Controller初始化后无法禁用XSS过滤.

因为如果你能$config['global_xss_filtering'] = TRUE;config.php文件,笨执行对XSS过滤$_POST,$_GET,$_COOKIE在初始化之前Controllers,Models和...

因此,当您访问Controller之前,所有事情都已完成.

虽然解决方案是根据需要禁用$config['global_xss_filtering']和运行特定变量的XSS过滤,但有一种方法可以保留原始值(预过滤)以便以后使用它们:

1)设置$config['enable_hooks']TRUEapplication/config.php.

2)将以下内容插入application/config/hooks.php:

$hook['pre_controller'] = array(
    'class'    => '',
    'function' => 'keep_vars',
    'filename' => 'keep_vars.php',
    'filepath' => 'hooks',
    'params'   => array($_POST, $_GET)
);
Run Code Online (Sandbox Code Playgroud)

注意:我们在Controller初始化之前使用它Hook来执行keep_vars()函数(您可能还想考虑使用'pre_system'键).

3)使用以下内容创建keep_vars.php内部application/hooks/目录:

<?php

function keep_vars ($vars = array())
{
    if (empty($vars)) return;

    global $pre_filter;

    $pre_filter = array();

    foreach ($vars as $var) {
        $pre_filter = array_merge($pre_filter, $var);
    }
}
Run Code Online (Sandbox Code Playgroud)

4)最后,当您想要访问控制器中$_GET$_POST控制器中的$pre_filter变量时,请在方法内定义全局变量:

class Foo extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
    }

    public function bar ()
    {
        // define as global
        global $pre_filter;

        // check the pre XSS filtered values
        print_r($pre_filter);

        // you can get access to pre filtered $_POST['key'] by:
        echo $pre_filter['key'];
    }
}
Run Code Online (Sandbox Code Playgroud)