SanitizeHelper trong Rails
Bài đăng này đã không được cập nhật trong 5 năm
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:
sanitize(html, options = {})
- 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.
- 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ặcLoofah::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
.
- 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
- Cú pháp:
sanitize_css(style)
- 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
- Cú pháp:
strip_links(html)
- Mô tả:
- Loại bỏ tất cả các
link tags
tronghtml
trở thànhlink text
- 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>')
# => <malformed & link
V. Method strip_tags
- Cú pháp:
strip_tags(html)
- Mô tả:
- Loại bỏ tất cả các
html tags
tronghtml
, bao gồm cả cáccomments
và các ký tự đặc biệt.
- 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")
# => > A quote from Smith & 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
All rights reserved