Codeigniter - Отключить фильтрацию XSS по почте - PullRequest
24 голосов
/ 24 сентября 2010

Я пытаюсь настроить CMS на задней стороне сайта, но всякий раз, когда в данных публикации есть <a href=..., данные почты удаляются.

У меня есть $config['global_xss_filtering'] = TRUE; в конфигурации

Мой вопрос, есть ли способ отключить фильтрацию xss для одного элемента?

например,

$this->input->post('content', true); - включает, но как его отключить?

Спасибо всем.

PVS

Ответы [ 7 ]

27 голосов
/ 24 сентября 2010

Если вы хотите изменить поведение по умолчанию метода post(), вы можете расширить базовую библиотеку ввода или, если вам лень, вы можете просто изменить строку 278 (или около того) библиотеки ввода на следующее:

/**
* Fetch an item from the POST array
*
* @access   public
* @param    string
* @param    bool
* @return   string
*/
function post($index = '', $xss_clean = TRUE)
{
    return $this->_fetch_from_array($_POST, $index, $xss_clean);
}

Единственное отличие состоит в том, что я изменил переменную $ xss_clean на TRUE вместо FALSE.Теперь вы можете отключить глобальную XSS-фильтрацию, и она будет автоматически фильтровать входные данные, если вы не укажете false в качестве второго параметра при вызове метода post() библиотеки ввода.Только один метод - это метод get(), и вы можете изменить его таким же образом.

Однако на вашем месте я бы просто расширил нативную библиотеку, потому что у вас есть хороший шанс »к тому времени, когда вы обновите CodeIgniter, вы забудете об этом, и вдруг вам будет интересно, почему вы подвергаетесь атаке XSS.Это будет выглядеть так:

class MY_Input extends CI_Input {

    function My_Input()
    {
        parent::CI_Input();
    }

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

Подробнее о расширении библиотек вы можете узнать здесь:

http://codeigniter.com/user_guide/general/creating_libraries.html

6 голосов
/ 07 ноября 2013

Если вы хотите оставить глобальный xss_clean включенным и переопределить его только в определенных случаях, вы можете расширить библиотеку ввода, сохранив клон $_POST для предоставления необработанных данных при запросе:

<?php if (!defined('BASEPATH')) exit('No direct access allowed.');
class MY_Input extends CI_Input {

public function __construct() {
    $this->_POST_RAW = $_POST; //clone raw post data 
    parent::__construct(); 
}

public function post($index = null, $xss_clean = TRUE) { 
    if(!$xss_clean){ //if asked for raw post data -eg. post('key', false)-, return raw data. Use with caution.
        return $this->_POST_RAW[$index];
    }
    return parent::post($index, $xss_clean); 
    }
}
?>

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

1 голос
/ 29 октября 2013

В моем случае решение treeface не работает, но я нашел другой способ. Я сделал MY_Input с _sanitize_globals () и я добавил, что в том месте, где выполняется очистка почтовых данных, создается конструкция.

// Clean $_POST Data
if (is_array($_POST) AND count($_POST) > 0) {
    foreach ($_POST as $key => $val) {
        if($this->_clean_input_keys($key) != 'my_none_sanitize_field')
        $_POST[$this->_clean_input_keys($key)] = $this->_clean_input_data($val);
    }
}
1 голос
/ 10 февраля 2013

я определил

global $mypost;
$mypost=$_POST;

в index.php моего корневого cms

тогда где угодно я могу использовать глобальную переменную, такую ​​как

global $mypost;

$var=isset($mypost["field"])? $mypost["field"]:"";

всякий раз, когда мне нужно сообщение без фильтра.

работал для меня, надеюсь, это помогает.

0 голосов
/ 27 марта 2015

работа с CI 2.2 Я думаю, что решение из treeface оставит input-> get (), input-> cookie () и т. Д. Не xss_cleaned.(мы используем get in oauth-запросы и т. д.).Глобальное изменение конфигурации останавливает их экранирование конструктором, и базовый класс по умолчанию все еще использует xss_clean в FALSE для этих методов ...

Я в основном реализовал одно и то же решение для нескольких методов.1005 * надеюсь, что это кому-то поможет

0 голосов
/ 18 февраля 2011

Да, расширение Input с заменой метода post было очень полезным, как и проницательный читатель, который заметил, что он должен возвращать parent :: post ($ index, $ xss_clean). Я получал ошибки и не думал об этой очевидной ошибке. Исправлено, и я выключен и работаю.

Мы используем его для экранирования данных постов для использования в инструкциях sql. Хотя методы db CI хороши, у нас есть несколько больших операторов sql, которые легче кодировать вручную.

0 голосов
/ 24 сентября 2010

Вы можете временно отключить его

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

$ c = $ this-> input-> post ('content'); затем включите его снова.

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

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