Вы можете использовать Sanitize для фильтрации HTML.
Используя элементы примера, которые вы перечислили в своем вопросе, вы использовали бы что-то подобное в своем коде проверки:
Sanitize.clean(html,
:elements => ['p', 'ul', 'li', 'div', 'img'],
:attributes => {'
'all' => ['style']
}
)
Как я уже упоминал в моем комментарии выше, использование атрибута style
может быть опасным, особенно если вы разрешите теги <a>
, так как они открывают вам атаки clickjacking , если пользователь создает невидимую ссылку, которая охватывает всю страницу.
Если вы хотите разрешить теги <a>
, я бы рекомендовал полностью запретить style
и, возможно, добавить rel=nofollow
к предоставленным пользователем ссылкам:
Sanitize.clean(html,
:elements => ['p', 'ul', 'li', 'div', 'img', 'a'],
:add_attributes => {
'a' => {'rel' => 'nofollow'}
}
)