Как стать автором
Обновить

Комментарии 7

Угу. В репозитории с начала марта по конец апреля сотня коммитов, за май — всего пять штук. И те — фиксы.
Впрочем, все и так всё понимают.
И это грустно… Потихоньку пропадает удобный, хорошо документированный фрэймворк…
Кстати, можно вопросик? Вы не сталкивались с такой особенностью кодеигнитеровского XSS фильтра — он убивает ссылки в href`ах и src картинок при получении данных их массива POST? Причем ссылки совершенно безобидные.
Конкретно с убийством ссылок из POST не сталкивался. Можно пример? Но вообще сталкивался с какими-то мелкими неудобствами при постинге комментариев.
Вот в том и соль. Натыкаюсь на эту проблему как раз при разработке скриптов постинга новостей или комментов.
Если посылать с формы на сервер текст вроде «Тут должна быть картинка <img src='http://asd.ru/img.jpg' align=right>» то из $this->input->post(«key») удастся выудить лишь «Тут должна быть картинка <img src=' ' align=right>»

Нашел регулярку, которая, по идее, и режет эти src, но, увы, не силен в них (( Если строку с ней закомментить, то все, конечно, в порядке. Но зачем тогда вообще включать этот XSS фильтр )

function _js_img_removal($match)
  {
    $attributes = $this->_filter_attributes(str_replace(array('<', '>'), '', $match[1]));
    return str_replace($match[1], preg_replace("#src=.*?(alert\(|alert&\#40;|javascript\:|charset\=|window\.|document\.|\.cookie|<script|<xss|base64\s*,)#si", "", $attributes), $match[0]);
  }

* This source code was highlighted with Source Code Highlighter.


Эта функция находится в libraries/Input.php

И вот как она вызывается в этом же файле:

$str = preg_replace_callback("#<img\s+([^>]*?)(\s?/?>|$)#si", array($this, '_js_img_removal'), $str);

* This source code was highlighted with Source Code Highlighter.
Мдя. Я тоже не настолько силён оказался, чтоб сообразить, в чём проблема. Могу разве что посоветовать спросить на форуме и\или воспользоваться конструкторами регэкспов и поэкспериментировать с регуляркой.
Вот парочка онлайновых есть.
www.pcre.ru/eval/
gskinner.com/RegExr/
Ладно, спасибо, будем копать дальше ) Истина где-то рядом :)

Стыдно признаться, но для себя пока что решил эту проблему hook`ом, который перед инициализацией системы дублирует массив $_POST неотфильтрованный в глобальную переменную $POST_ =) И в случае чего, нужные переменные нефильтрованные беру с него. Но некрасиво это конечно жутко…
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории