Spec-Zone.ru › Ruby on Rails 7.2

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

Модуль Action View Sanitize Helpers

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

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

sanitize(html, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/sanitize_helper.rb, line 111
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.

sanitize_css(style) Показать исходный код
# File actionview/lib/action_view/helpers/sanitize_helper.rb, line 116
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 150
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 133
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")
# => &gt; A quote from Smith &amp; Wesson

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

Spec-Zone.ru

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