From 82fef2096035421d25e1db73964491181a869ac1 Mon Sep 17 00:00:00 2001 From: Juanito Fatas Date: Tue, 14 May 2019 13:09:39 +0900 Subject: [PATCH] Update sanitizer in ActionView::Helpers::SanitizeHelper - The sanitizer has been changed to safe_list_sanitizer. - deprecate white_list_sanitizer --- .../app/helpers/action_text/content_helper.rb | 2 +- actionview/CHANGELOG.md | 3 +++ .../action_view/helpers/sanitize_helper.rb | 25 +++++++++++-------- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/actiontext/app/helpers/action_text/content_helper.rb b/actiontext/app/helpers/action_text/content_helper.rb index ed2887d8653b8..1e05f572f7262 100644 --- a/actiontext/app/helpers/action_text/content_helper.rb +++ b/actiontext/app/helpers/action_text/content_helper.rb @@ -4,7 +4,7 @@ module ActionText module ContentHelper - mattr_accessor(:sanitizer) { Rails::Html::Sanitizer.white_list_sanitizer.new } + mattr_accessor(:sanitizer) { Rails::Html::Sanitizer.safe_list_sanitizer.new } mattr_accessor(:allowed_tags) { sanitizer.class.allowed_tags + [ ActionText::Attachment::TAG_NAME, "figure", "figcaption" ] } mattr_accessor(:allowed_attributes) { sanitizer.class.allowed_attributes + ActionText::Attachment::ATTRIBUTES } mattr_accessor(:scrubber) diff --git a/actionview/CHANGELOG.md b/actionview/CHANGELOG.md index dcd3e33c46e87..7e756fb36b840 100644 --- a/actionview/CHANGELOG.md +++ b/actionview/CHANGELOG.md @@ -1,3 +1,6 @@ +* [ActionView::Helpers::SanitizeHelper] Deprecate `#white_list_sanitizer`, + please use `#safe_list_sanitizer` instead. + *Juanito Fatas* Please check [6-0-stable](https://github.com/rails/rails/blob/6-0-stable/actionview/CHANGELOG.md) for previous changes. diff --git a/actionview/lib/action_view/helpers/sanitize_helper.rb b/actionview/lib/action_view/helpers/sanitize_helper.rb index f4fa133f5531a..2974a150abc1f 100644 --- a/actionview/lib/action_view/helpers/sanitize_helper.rb +++ b/actionview/lib/action_view/helpers/sanitize_helper.rb @@ -17,7 +17,7 @@ module SanitizeHelper # ASCII, and hex character references to work around these protocol filters. # All special characters will be escaped. # - # The default sanitizer is Rails::Html::WhiteListSanitizer. See {Rails HTML + # The default sanitizer is Rails::Html::SafeListSanitizer. See {Rails HTML # Sanitizers}[https://github.com/rails/rails-html-sanitizer] for more information. # # Custom sanitization rules can also be provided. @@ -80,12 +80,12 @@ module SanitizeHelper # config.action_view.sanitized_allowed_tags = ['strong', 'em', 'a'] # config.action_view.sanitized_allowed_attributes = ['href', 'title'] def sanitize(html, options = {}) - self.class.white_list_sanitizer.sanitize(html, options).try(:html_safe) + self.class.safe_list_sanitizer.sanitize(html, options).try(:html_safe) end # Sanitizes a block of CSS code. Used by +sanitize+ when it comes across a style attribute. def sanitize_css(style) - self.class.white_list_sanitizer.sanitize_css(style) + self.class.safe_list_sanitizer.sanitize_css(style) end # Strips all HTML tags from +html+, including comments and special characters. @@ -123,20 +123,20 @@ def strip_links(html) end module ClassMethods #:nodoc: - attr_writer :full_sanitizer, :link_sanitizer, :white_list_sanitizer + attr_writer :full_sanitizer, :link_sanitizer, :safe_list_sanitizer - # Vendors the full, link and white list sanitizers. + # Vendors the full, link and safe list sanitizers. # Provided strictly for compatibility and can be removed in Rails 6. def sanitizer_vendor Rails::Html::Sanitizer end def sanitized_allowed_tags - sanitizer_vendor.white_list_sanitizer.allowed_tags + sanitizer_vendor.safe_list_sanitizer.allowed_tags end def sanitized_allowed_attributes - sanitizer_vendor.white_list_sanitizer.allowed_attributes + sanitizer_vendor.safe_list_sanitizer.allowed_attributes end # Gets the Rails::Html::FullSanitizer instance used by +strip_tags+. Replace with @@ -161,15 +161,20 @@ def link_sanitizer @link_sanitizer ||= sanitizer_vendor.link_sanitizer.new end - # Gets the Rails::Html::WhiteListSanitizer instance used by sanitize and +sanitize_css+. + # Gets the Rails::Html::SafeListSanitizer instance used by sanitize and +sanitize_css+. # Replace with any object that responds to +sanitize+. # # class Application < Rails::Application - # config.action_view.white_list_sanitizer = MySpecialSanitizer.new + # config.action_view.safe_list_sanitizer = MySpecialSanitizer.new # end # + def safe_list_sanitizer + @safe_list_sanitizer ||= sanitizer_vendor.safe_list_sanitizer.new + end + def white_list_sanitizer - @white_list_sanitizer ||= sanitizer_vendor.white_list_sanitizer.new + ActiveSupport::Deprecation.warn("Use safe_list_sanitizer instead") + safe_list_sanitizer end end end