Codeigniter удалить ВСЕ HTML теги - PullRequest
3 голосов
/ 14 мая 2011

Как удалить ВСЕ HTML-теги с codeigniter? я предполагаю, что вам придется использовать функцию PHP strip_tags, но я хотел что-то вроде глобальной настройки для фильтрации XSS

Спасибо

Ответы [ 2 ]

17 голосов
/ 14 мая 2011

Если вы имеете в виду использование методов input, Да, вы можете технически открыть system/libraries/Input.php, перейдя к следующему коду:

/**
* Clean Input Data
*
* This is a helper function. It escapes data and
* standardizes newline characters to \n
*
* @access   private
* @param    string
* @return   string
*/
function _clean_input_data($str)
{
    if (is_array($str))
    {
        $new_array = array();
        foreach ($str as $key => $val)
        {
            $new_array[$this->_clean_input_keys($key)] = $this->_clean_input_data($val);
        }
        return $new_array;
    }

    // We strip slashes if magic quotes is on to keep things consistent
    if (get_magic_quotes_gpc())
    {
        $str = stripslashes($str);
    }

    // Should we filter the input data?
    if ($this->use_xss_clean === TRUE)
    {
        $str = $this->xss_clean($str);
    }

    // Standardize newlines
    if (strpos($str, "\r") !== FALSE)
    {
        $str = str_replace(array("\r\n", "\r"), "\n", $str);
    }

    return $str;
}

И сразу после очистки xss вы можете поставить свою собственную функцию фильтрации следующим образом:

// Should we filter the input data?
if ($this->use_xss_clean === TRUE)
{
    $str = $this->xss_clean($str);
}

$str = strip_tags($str);

Однако это означает, что каждый раз, когда вы обновляете CodeIgniter, вам придется снова вносить это изменение. Кроме того, поскольку это делает все это глобально, не имеет смысла, если возвращаемое вами значение, скажем, числовое. По этим причинам

Code Igniter Cat Does Not Approve

Теперь для альтернативного решения вы можете использовать библиотеку CodeIgniter Form Validation , которая позволяет вам устанавливать пользовательские правила для полей, включая функции php, которые могут принимать один аргумент, например strip_tags:

$this->form_validation->set_rules('usertext', 'User Text', 'required|strip_tags');

Я не уверен, каковы обстоятельства, поэтому я позволю вам решить, какой путь выбрать, но в целом я рекомендую обрабатывать проверку данных для каждого отдельного случая, поскольку в большинстве случаев проверка данных уникален.

2 голосов
/ 25 июля 2011

Это то, что я использую, когда я хочу исключить XSS, HTML и при этом сохранить пользовательский контент (даже попытки вредоносного кода)

private function stripHTMLtags($str)
{
    $t = preg_replace('/<[^<|>]+?>/', '', htmlspecialchars_decode($str));
    $t = htmlentities($t, ENT_QUOTES, "UTF-8");
    return $t;
}

Первое регулярное выражение удаляет все, что имеет формат html, иhtmlentities заботится о цитатах и ​​прочем.Используйте его на вашем контроллере каждый раз, когда вам нужно ДЕЙСТВИТЕЛЬНО убирать вещи.Быстро и просто.

Например, эта очень злая улица с большим количеством кодов и тэгов

Just another post (http://codeigniter.com) blablabla text blabla:</p>1 from users; update users set password = 'password'; select * <div class="codeblock">[aça]<code><span style="color: rgb(221, 0, 0);">'username'</span><span style="color: rgb(0, 119, 0);">);&nbsp;</span><span style="color: rgb(255, 128, 0);">//&nbsp;filtered<br></span><span style="color: rgb(0, 0, 187);">- HELLO I'm a text with "-dashes_" and stuff '!!!?!?!?!$password&nbsp;</span></span>

Становится

Just another post (http://codeigniter.com) blablabla text blabla:1 from users; update users set password = 'password'; select * [aça]'username');&nbsp;//&nbsp;filtered- HELLO I'm a text with "-dashes_" and stuff '!!!?!?!?!$password&nbsp; <ok.>

У него все еще есть код, но это ничего не изменит с вашей БД.Используйте это как

$this->stripHTMLtags($this->input->post('html_text'));

Вы можете поместить эту функцию в библиотеку, чтобы вам не приходилось взламывать CI:)

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