Особенности фильтра материалов в Joomla
Author: sacredphoenix   
07.10.2009 10:09

Копаясь в Joomla заметил странную особенность работы фильтра входящих данных - перед фильтрацией все спецсимволы html преобразовываются в исходные, после фильтрации обратно. Естественно символы '<' и '>' при этом жестко обрезались, даже будучи в совершенно безопасном виде '&lt;' и '&gt;'. Такое положение вещей показалось достаточно странным.

Вообще, ко всем материалам, добавленным не суперадминистратором, Joomla применяет фильтр, который разбивает данный материал на теги и параметры и убирает неугодные(занесенные в Black List). Исходный код фильтра находится в каталоге libraries/joomla/filter. Вот черный список по умолчанию(зашит в код фильтра):

var $tagBlacklist = array ('applet', 'body', 'bgsound', 'base', 'basefont',
 'embed', 'frame', 'frameset', 'head', 'html', 'id', 'iframe', 'ilayer',
 'layer', 'link', 'meta', 'name', 'object', 'script', 'style', 'title',
 'xml');
var $attrBlacklist = array ('action', 'background', 'codebase', 'dynsrc',
 'lowsrc'); // also will strip ALL event handlers
 

Просмотрев код фильтра нашел участок, ответственный за преобразование спецсимволов(в файле filterinput.php):

$trans_tbl = get_html_translation_table(HTML_ENTITIES);
foreach($trans_tbl as $k => $v) {
$ttr[$v] = utf8_encode($k);
}
 
$source = strtr($source, $ttr);
 

Закономерно возникает вопрос - зачем это делается? Как правило подобные фильтры служат для защиты от XSS. Возможно мое знание XSS не совершенно, но все же никак не пойму, от какой именно атаки защищает подобные манипуляции. Надо бы поинтересоваться у разработчиков...

Tags:
Обновлено 07.10.2009 12:31
 

Добавить комментарий


Защитный код
Обновить

 
Copyright (c) 2009 Codesex. Незаконное копирование будет анально наказано