модуль ActionView::Helpers::SanitizeHelper
Модуль SanitizeHelper предоставляет набор методов для очистки текста от нежелательных HTML-элементов. Эти вспомогательные методы расширяют Action View, делая их вызываемыми в ваших шаблонах.
Общедоступные методы экземпляров
# File actionview/lib/action_view/helpers/sanitize_helper.rb, line 81
def sanitize(html, options = {})
self.class.safe_list_sanitizer.sanitize(html, options)&.html_safe
end Очищает входные данные HTML, удаляя все, кроме известных безопасных тегов и атрибутов.
Он также удаляет атрибуты href/src с небезопасными протоколами, такими как javascript:, а также защищает от попыток использовать ссылки на символы Unicode, ASCII и шестнадцатеричные, чтобы обойти эти фильтры протоколов. Все специальные символы будут экранированы.
По умолчанию используется очиститель Rails::Html::SafeListSanitizer. Подробнее см. 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 86 def sanitize_css(style) self.class.safe_list_sanitizer.sanitize_css(style) end
Очищает блок кода CSS. Используется sanitize при столкновении с атрибутом стиля.
# File actionview/lib/action_view/helpers/sanitize_helper.rb, line 120 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 103 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–2019 David Heinemeier Hansson
Licensed under the MIT License.