Опции фильтрации HTML контента статей Joomla Печать
Добавил(а) microsin   

Веб-сайты с движками на основе активной обработки могут быть атакованы недобросовестными пользователями, когда они вводят специальный HTML-код при редактировании статей. Фильтрация HTML - способ защитить Ваш сайт на основе CMS Joomla. Joomla версии 1.5 по сравнению с предыдущими версиями получила новые опции фильтрации, чтобы дать больше управления содержимым HTML, который разрешено вводить поставщикам контента для сайта (например авторам, публикующим статьи). Вы можете ужесточить требования или предоставить больше свободы, в зависимости от требований к Вашему сайту. 

Важно понимать, что фильтрация происходит в момент сохранения статьи, после того, как она была написана и отредактирована в редакторе контента (JCE Editor, TinyMCE и т. д.). В зависимости от используемого редактора и настроек фильтра, можно сделать так, что пользователь сможет добавлять и редактировать HTML только во время редактировании статьи, а при сохранении весь введенный HTML-код будет удален. Это может иногда привести к беспорядку и недопониманию - что же происходит. Если у Вас включена фильтрация на сайте, то убедитесь, что пользователи знают какой тип HTML разрешен, как какой нет. 

При настройках по умолчанию для Joomla версии 1.5.9 задано, что все пользователи, за исключением группы Super Administrator, имеют фильтрацию типа "black list". Это было сделано для того, чтобы защититься от разметки, обычно связанной с атаками на сайт. Так что если Вы не настраивали опции фильтрации, то Super Administrator не попадает под фильтрацию, и все другие пользователи попадают под фильтрацию "black list", где задан список фильтруемых по умолчанию элементов. Если здесь Вы создадите фильтр, это отменит умолчания, и фильтр по умолчанию больше не будет действовать. На сайт допустимо применить только одна опция фильтрации.

Глобальные настройки фильтрации доступны в админке сайта, меню Статьи -> Настройки:

Joomla articles settings global1

Joomla articles settings global2

При настройке фильтрации нужно выполнить 2 шага: 

1. Выберите группы пользователей, которые будут получать фильтрацию. Обычно это может включать группу самого старшего уровня, которую Вы хотите фильтровать, и все группы, которые находятся по уровню ниже её (имеют меньше привилегий). Например, если Вы хотите включить фильтрацию для группы Publishers и под ней, в список фильтруемых групп попадут группы Publisher, Editor, Author и Registered.

2. Введите тип и степень желаемой фильтрации. 

Например, если Вы хотите фильтровать только для групп Author, Registered и гостей, то для списка Filter Groups выберите "Author", "Registered" и "Public Front End", и затем выберите желаемый тип фильтрации. Эта настройка фильтрации коснется пользователей сайта, которые входят в группы Author, Registered и public но не в "привилегированные" группы типа Editors, Publishers и т. д. Т. е. пользователи из Editors, Publishers могут вводить любой контент в статье, и Joomla не будет его "портить". 

Фильтрация по умолчанию отменяется путем ввода настроек в следующие поля: 

Filter Groups. Группы фильтра - эта установка задает группы, к которым нужно применить фильтрацию. Используйте комбинацию клавиш Ctrl+Click для выбора нескольких групп. Группы, которые не выбраны, не будут подвергаться фильтрации. 

Важное замечание: есть баг в версии 1.5.8, заключающийся в том, что Вам нужно указать как минимум 2 группы, чтобы фильтрация работала. Если Вы выберете только одну группу, то фильтрации не будет. Этот баг обойти просто - убедитесь, что здесь всегда заданы как минимум 2 группы. 

Filter Type. Тип фильтрации, который может быть Black List (черный список, установка по умолчанию), White List (белый список), No HTML (без HTML). 

Black list означает, что разрешены все теги и атрибуты HTML, за исключением перечисленных.
White list означает, что разрешены только перечисленные теги и атрибуты.
No HTML означает, что HTML-разметка запрещена в принципе. Все теги HTML будут удалены из статьи, когда она будет сохранена (статья будет "испорчена"). 

Filter Tags. Фильтруемые дополнительные теги, которые будут исключены при сохранении, когда используется Black List, или только разрешенные теги, когда включен White List.

Filter Attributes. Фильтруемые дополнительные атрибуты, которые будут исключены при сохранении, когда используется Black List, или только разрешенные атрибуты тегов, когда включен White List. 

[Фильтры по умолчанию (Default Filters)

По умолчанию метод фильтрации в Joomla типа 'Black List'. 'Black List' по умолчанию содержит следующие теги для исключения: 'applet', 'body', 'bgsound', 'base', 'basefont', 'embed', 'frame', 'frameset', 'head', 'html', 'id', 'iframe', 'ilayer', 'layer', 'link', 'meta', 'name', 'object', 'script', 'style', 'title', 'xml'.

 'Black List' по умолчанию содержит следующие исключаемые атрибуты: 'action', 'background', 'codebase', 'dynsrc', 'lowsrc'.

Вы можете внести в 'Black List' (т. е. запретить) дополнительные теги и атрибуты путем добавления тегов в поля Filter tags и Filter attributes, отделяя каждое имя тега или атрибута пробелом или запятой. Если Вы выберете тип фильтрации "Black List", то этот список будет использоваться всегда, плюс любые дополнительные теги и атрибуты, которые Вы добавили.

Обратите внимание, что эти настройки будут работать всегда, независимо от редактора контента, который используется (встроенный упрощенный или более продвинутый типа JCE или TinyMCE). Даже если Вы используете визуальный редактор, настройки фильтрации могут зачистить дополнительные теги и атрибуты до сохранения информации в базе данных.

[Примеры настройки фильтрации]

Пример 1: разрешить пользователям в Вашей группе Author сохранять содержимое только с базовыми тегами HTML. Для этого используйте следующие настройки: 

Joomla filter example1

• В списке выбора группы "Filter groups" выберите две группы: Registered и Author.
• В качестве типа фильтра "Filter type" выберите White List.
• Установите фильтруемые теги "Filter tags" в: p, b, i, em, br, a, ul, ol, li, img.
• Установите фильтруемые атрибуты "Filter attributes" в: href, target, src.

В этом примере не будет делаться фильтрация для членов групп Editor, Publisher, Manager, Administrator и Super Administrator.

Пример 2: применить черный список по умолчанию для фильтрации всех групп, за исключением Admin и Super Admin. Для этого используйте следующие настройки:

Joomla filter example2

• В списке выбора группы "Filter groups" выберите все группы, за исключением Admin и Super Admin.
• В качестве типа фильтра "Filter type" выберите Black List.
• Оставьте пустыми поля "Filter Tags" и "Filter attributes".

В этом примере фильтрация не будет выполняться фильтрация для членов групп Administrator и Super Administrator.

Пример 3: если Вы хотите кому-то, кого Вы не знаете (и конечно же у Вас нет причин им доверять), позволить публиковать статьи на Вашем сайте с Joomla, то самая безопасная (и наиболее ограничивающая) фильтрация будет следующая:

Joomla filter example3

• В общих настройках сайта, меню Site -> Global Configuration -> System, установите "New Registration Type" в "Author".
• В списке выбора группы "Filter groups" выберите группы Registered и Author.
• В качестве типа фильтра "Filter type" выберите No html.

В результате не позволяется новым авторам (которые попадут в группу Author) использовать HTML внутри содержимого статьи. В этом примере не будет делаться фильтрация для членов групп Editor, Publisher, Manager, Administrator и Super Administrator.

[Замечания для разработчиков]

Параметры фильтрации в файле config.xml имеют новый параметр menu="hide". Это скрывает фильтры области Menu Item's Component, поскольку Вы не хотите располагать каскадом переопределения, произошли бы на уровне пункта меню. 

[Несколько небольших советов

• В версиях Joomla до 1.5, были отдельные процессы для создание Static Content Item и Normal Content Items. Оба процесса теперь выполняются просто при добавлении статьи. Normal Content Items теперь просто называется статьями (Articles), and Static Content Items are now called Uncategorized Articles.

• Для создания Static Content Item создайте новую статью обычным образом, как создаете новый контент, и прикрепите к секции 'Uncategorized' области Category. Вы можете тогда использовать Menu Item Type, называемый Article Layout, чтобы показать статью на странице.

• Joomla! 1.5 поменял метод, который Вы должны использовать для создания ссылки 'Read more...'. Когда Вы добавляете или редактируете статью, просто нажмите кнопку 'Read more...', которая находится в нижней части экрана, за кнопками Image и Pagebreak. Это вставляет в статью обрыв 'Read more...' (Прочитать больше...). Текст перед обрывом будет отображаться как вводный текст статьи (Intro Text), и текст после обрыва будет отображен, когда читатель пройдет по ссылке 'Read more...'.

[Ссылки

1. Filtering Options (HTML) site:docs.joomla.org.