модуль ActionView::Helpers::SanitizeHelper
Модуль SanitizeHelper предоставляет набор методов для очистки текста от нежелательных HTML-элементов. Эти вспомогательные методы расширяют Action View, делая их вызываемыми в ваших шаблонах.
Публичные методы экземпляров
# File actionview/lib/action_view/helpers/sanitize_helper.rb, line 82
def sanitize(html, options = {})
self.class.white_list_sanitizer.sanitize(html, options).try(:html_safe)
end Очищает HTML-ввод, удаляя все теги и атрибуты, которые не находятся в белом списке.
Он также удаляет атрибуты href/src с небезопасными протоколами, такими как javascript:, а также защищает от попыток использования Unicode, ASCII и шестнадцатеричных кодовых точек для обхода этих фильтров протоколов. Все специальные символы будут экранированы.
По умолчанию используется очиститель Rails::Html::WhiteListSanitizer. Дополнительную информацию см. на странице Rails HTML Sanitizers.
Также можно указать пользовательские правила очистки.
Обратите внимание, что очистка предоставленного пользователем текста не гарантирует, что полученная разметка будет валидной или даже правильно сформированной.
Параметры
-
:tags- Массив разрешённых тегов. -
:attributes- Массив разрешённых атрибутов. -
:scrubber- Объект Rails::Html scrubber или Loofah::Scrubber, определяющий пользовательские правила очистки. Пользовательский очиститель имеет приоритет над пользовательскими тегами и атрибутами.
Примеры
Нормальное использование:
<%= sanitize @comment.body %>
Предоставление пользовательских тегов и атрибутов в белом списке:
<%= sanitize @comment.body, tags: %w(strong em a), attributes: %w(href) %>
Предоставление пользовательского очистителя Rails::Html:
class CommentScrubber < Rails::Html::PermitScrubber
def initialize
super
self.tags = %w( form script comment blockquote )
self.attributes = %w( style )
end
def skip_node?(node)
node.text?
end
end
<%= sanitize @comment.body, scrubber: CommentScrubber.new %> См. Rails HTML Sanitizer для документации по очистителям Rails::Html.
Предоставление пользовательского очистителя Loofah::Scrubber:
scrubber = Loofah::Scrubber.new do |node| node.remove if node.name == 'script' end <%= sanitize @comment.body, scrubber: scrubber %>
См. документацию Loofah для получения дополнительной информации об определении пользовательских объектов Loofah::Scrubber.
Для установки значений по умолчанию разрешённых тегов или атрибутов во всём приложении:
# In config/application.rb config.action_view.sanitized_allowed_tags = ['strong', 'em', 'a'] config.action_view.sanitized_allowed_attributes = ['href', 'title']
# File actionview/lib/action_view/helpers/sanitize_helper.rb, line 87 def sanitize_css(style) self.class.white_list_sanitizer.sanitize_css(style) end
Очищает блок CSS-кода. Используется sanitize при обработке атрибута style.
# File actionview/lib/action_view/helpers/sanitize_helper.rb, line 121 def strip_links(html) self.class.link_sanitizer.sanitize(html) end
Удаляет все теги ссылок из html, оставляя только текст ссылки.
strip_links('<a href="http://www.rubyonrails.org">Ruby on Rails</a>')
# => Ruby on Rails
strip_links('Please e-mail me at <a href="mailto:me@email.com">me@email.com</a>.')
# => Please e-mail me at me@email.com.
strip_links('Blog: <a href="http://www.myblog.com/" class="nav" target=\"_blank\">Visit</a>.')
# => Blog: Visit.
strip_links('<<a href="https://example.org">malformed & link</a>')
# => <malformed & link
# File actionview/lib/action_view/helpers/sanitize_helper.rb, line 104 def strip_tags(html) self.class.full_sanitizer.sanitize(html) end
Удаляет все HTML-теги из html, включая комментарии и специальные символы.
strip_tags("Strip <i>these</i> tags!")
# => Strip these tags!
strip_tags("<b>Bold</b> no more! <a href='more.html'>See more here</a>...")
# => Bold no more! See more here...
strip_tags("<div id='top-bar'>Welcome to my website!</div>")
# => Welcome to my website!
strip_tags("> A quote from Smith & Wesson")
# => > A quote from Smith & Wesson
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.