Отключить глобальные фитинги для определенных переменных - PullRequest
0 голосов
/ 20 июня 2011

Я установил для global_xss_filtering значение TRUE в моем конфигурационном файле.Можно ли отключить фильтрацию xss для определенных данных - допустим, я хочу отключить фильтрацию xss для переменной post 'title'.

Возможно ли это сделать?

1 Ответ

1 голос
/ 20 июня 2011

Ну, насколько я знаю, есть небольшой взлом, который вы можете сделать. Вы переходите к входному классу (system / core / input.php) и меняете значение по умолчанию для параметра $ xss_clean. Собственно, он установлен в FALSE, так что вы можете изменить его, передав TRUE в $ this-> input-> post () или get ().

Пример с post () (в строке 128 файла input.php), но вы также должны обратиться к get.

/**
    * Fetch an item from the POST array
    *
    * @access   public
    * @param    string
    * @param    bool
    * @return   string
    */
    function post($index = NULL, $xss_clean = TRUE)   // <-- Here I changed the default from FALSE to TRUE)
    {
        // Check if a field has been provided
        if ($index === NULL AND ! empty($_POST))
        {
            $post = array();

            // Loop through the full _POST array and return it
            foreach (array_keys($_POST) as $key)
            {
                $post[$key] = $this->_fetch_from_array($_POST, $key, $xss_clean);
            }
            return $post;
        }

        return $this->_fetch_from_array($_POST, $index, $xss_clean);
    }

Теперь вы отключаете глобальную фильтрацию (установите ее в FALSE). Теперь ваш ввод будет автоматически фильтроваться, если вы не укажете FALSE в качестве второго параметра вызова, например $this->input->post('title',FALSE).

В качестве альтернативы (вместо взлома ядра) вы можете расширить собственную библиотеку ввода, чтобы передать значение ИСТИНА вместо ЛОЖЬ, что-то вроде этого:

class MY_Input extends CI_Input {

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

    //........

    function get($index = NULL, $xss_clean = TRUE)
    {
        return parent::get($index, $xss_clean);
    }

    //...........

    function post($index = NULL , $xss_clean = TRUE)
    {
        return parent::post($index, $xss_clean);
    }

}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...