Spec-Zone.ru › Ruby on Rails 7.0

модуль ActionView::Helpers::SanitizeHelper

Модуль SanitizeHelper предоставляет набор методов для очистки текста от нежелательных HTML-элементов. Эти вспомогательные методы расширяют Action View, делая их вызываемыми в ваших шаблонах.

Публичные методы экземпляра

sanitize(html, options = {}) Показать исходный код
# 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']
sanitize_css(style) Показать исходный код
# 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 при встрече атрибута style.

strip_links(html) Показать исходный код
# 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>')
# => &lt;malformed &amp; link
strip_tags(html) Показать исходный код
# 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")
# => &gt; A quote from Smith &amp; Wesson

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API