codeigniter 2 и как отключить xss для TinyMCE

Ив просматривал каждый сайт, включая stackoverflow по этой проблеме.

У меня XSS глобально включен, и несколько страниц, которые я использую TinyMCE. На тех страницах я хотел бы, чтобы часть TinyMCE не включала XSS.

Прочитав около 40 страниц, они все говорят сделать следующее:

$tiny_mce = $this->input->post('note'); // xss filtering off 

или

 $tiny_mce = $this->input->post('note', FALSE); // xss filtering off 

Я попробовал оба, вот моя модель:

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

Кто-нибудь знает, почему он не работает? Любая помощь будет замечательной! Я действительно не хочу, чтобы глобально отключил 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); } 

но это тоже не работает.

Невозможно отключить фильтрацию XSS после инициализации контроллера.

Потому что если вы включите $config['global_xss_filtering'] = TRUE; в файле config.php CodeIgniter выполняет фильтрацию XSS на $_POST , $_GET , $_COOKIE перед инициализацией Controllers , Models и …

Поэтому, когда вы получаете доступ к Controller все делается раньше.

Хотя решение состоит в том, чтобы отключить $config['global_xss_filtering'] и запускать XSS-фильтрацию по определенным переменным по мере необходимости, существует способ сохранить исходные значения (предварительно отфильтрованные) где-то для их использования позже:

1) Установите $config['enable_hooks'] в TRUE в application/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) ); 

Примечание. Мы используем этот 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); } } 

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

Прочитав документацию по безопасности еще 3 раза, мне приходит в голову, что параметр безопасности применяется при вызове нового контроллера, поэтому использование

$this->config->set_item('global_xss_filtering', FALSE);

в контроллере не будет работать. Однако вы можете использовать один из крючков CI для этого.

крюк pre_controller выглядит так, будто он должен сделать трюк для вас.

theres довольно хороший учебник около половины вниз страницы здесь, которая показывает вам, как переопределить элементы конфигурации. Он находится в разделе «Поддержка отдельных ответов».

Поэтому в файле config / hooks.php добавьте следующее:

 $hook['pre_controller'] = array( 'class' => 'the_name_of_your_controller', 'function' => 'config', //or the name of the function that will fire on preload 'filename' => 'the_file_name_of_your_controller.php', 'filepath' => 'hooks' ); 

THEN в вашем контроллере добавьте эту функцию:

 public function config() { $CI =& get_instance(); $CI->config->set_item( 'global_xss_filtering', FALSE ); }