24/09/2018, 14:05

SanitizeHelper trong Rails

I. SanitizeHelper là gì? SanitizeHelper là modul trong Rails cung cấp các methods giúp loại bỏ các phần tử HTML không mong muốn, đảm bảo an toàn cho website. Các methods được cung cấp bao gồm: sanitize, sanitize_css, strip_links, strip_tags II. Method sanitize Cú pháp: ...

I. SanitizeHelper là gì?

  • SanitizeHelper là modul trong Rails cung cấp các methods giúp loại bỏ các phần tử HTML không mong muốn, đảm bảo an toàn cho website.
  • Các methods được cung cấp bao gồm: sanitize, sanitize_css, strip_links, strip_tags

II. Method sanitize

  1. Cú pháp:
sanitize(html, options = {})
  1. Mô tả:
  • Loại bỏ các tag và attribute của HTML input trừ các phần tử an toàn đã biết.
  • Loại bỏ các thuộc tính href/src với các giao thức không an toàn như javascript:, đồng thời chống lại các nỗ lực sử dụng các tham chiếu ký tự Unicode, ASCII và hex, xóa tất cả các ký tự đặc biệt.
  • Sanitize mặc định là Rails :: Html :: WhiteListSanitizer.
  • Có thể custom các roles của santize.
  • Tuy nhiên sanitize cũng không được đảm bảo một cách tuyệt đối về tính an toàn và định dạng.
  1. Các thuộc tính:
  • :tags: Các tag được cho phép

  • :attributes: Các thuộc tính được cho phép

  • :scrubber: Phần tử Rails::Html hoặc Loofah::Scrubber cho phép thiết lập các quy tắc tùy chỉnh, được ưu tiên hơn :tags và :attributes.

  1. Ví dụ:
  • Sử dụng thông thường:
<%= sanitize @comment.body %>
  • Sử dụng tùy chỉnh tags và attributes:
<%= sanitize @comment.body, tags: %w(strong em a), attributes: %w(href) %>
  • Sử dụng tùy chỉnh Rails::Html scrubber:
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 %>
  • Sử dụng tùy chỉnh Loofah::Scrubber:
scrubber = Loofah::Scrubber.new do |node|
  node.remove if node.name == 'script'
end

<%= sanitize @comment.body, scrubber: scrubber %>
  • Cài đặt các tags hoặc attributes mặc định trong file config/application.rb:
config.action_view.sanitized_allowed_tags = ['strong', 'em', 'a']
config.action_view.sanitized_allowed_attributes = ['href', 'title']

III. Method sanitize_css

  1. Cú pháp:
sanitize_css(style)
  1. Mô tả:
  • Được sử dụng để lọc css trong các thuộc tính style của phần tử
  • Được sử dụng trong sanitize

IV. Method strip_links

  1. Cú pháp:
strip_links(html)
  1. Mô tả:
  • Loại bỏ tất cả các link tags trong html trở thành link text
  1. Ví dụ:
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

V. Method strip_tags

  1. Cú pháp:
strip_tags(html)
  1. Mô tả:
  • Loại bỏ tất cả các html tags trong html, bao gồm cả các comments và các ký tự đặc biệt.
  1. Ví dụ:
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

VI. Kết luận

Trên đây là các method cơ bản của SanitizeHelper trong Ruby. Hi vọng bài viết có thể giúp các bạn có được cách nhìn tổng quan về SanitizeHelper và cách dùng các hàm sanitize cơ bản trong Ruby.

Cảm ơn đã theo dõi

0