модуль ActionView::Helpers::SanitizeHelper
Action View Sanitize Helpers
Модуль SanitizeHelper предоставляет набор методов для очистки текста от нежелательных HTML-элементов. Эти вспомогательные методы расширяют Action View, делая их вызываемыми в ваших шаблонах.
Общедоступные методы экземпляра
# File actionview/lib/action_view/helpers/sanitize_helper.rb, line 100
def sanitize(html, options = {})
self.class.safe_list_sanitizer.sanitize(html, options)&.html_safe
end Очищает входные данные HTML, удаляя все, кроме известных безопасных тегов и атрибутов.
Он также удаляет атрибуты href/src с небезопасными протоколами, такими как javascript:, а также защищает от попыток использования Unicode, ASCII и шестнадцатеричных ссылок на символы для обхода этих фильтров протоколов.
По умолчанию используется очиститель Rails::HTML5::SafeListSanitizer. См. Rails HTML Sanitizers для получения дополнительной информации.
Также можно указать пользовательские правила очистки.
Обратите внимание, что очистка пользовательского текста не гарантирует, что полученная разметка будет валидной или даже правильно сформированной.
Параметры
-
:tags- Массив разрешенных тегов. -
:attributes- Массив разрешенных атрибутов. -
:scrubber- Объект Rails::HTML очиститель или 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']
По умолчанию, начиная с Rails 7.1, для очистки используется HTML5-парсер (если он доступен, см. ПРИМЕЧАНИЕ ниже). Если вы хотите вернуться к предыдущему поведению HTML4, вы можете сделать это, установив следующее в конфигурации своего приложения:
# In config/application.rb config.action_view.sanitizer_vendor = Rails::HTML4::Sanitizer
Или, если вы обновляете с предыдущей версии Rails и хотите использовать поведение HTML5:
# In config/application.rb config.action_view.sanitizer_vendor = Rails::HTML5::Sanitizer
ПРИМЕЧАНИЕ: Rails::HTML5::Sanitizer не поддерживается на JRuby, поэтому на платформах JRuby Rails будет использовать Rails::HTML4::Sanitizer.
# File actionview/lib/action_view/helpers/sanitize_helper.rb, line 105 def sanitize_css(style) self.class.safe_list_sanitizer.sanitize_css(style) end
Очищает блок кода CSS. Используется sanitize при обнаружении атрибута style.
# File actionview/lib/action_view/helpers/sanitize_helper.rb, line 139 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 122 def strip_tags(html) self.class.full_sanitizer.sanitize(html)&.html_safe 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–2021 David Heinemeier Hansson
Licensed under the MIT License.