class HtmlSanitizer def self.strict(string) remove = %w(style body head) strip = ['script'] scrubber = Loofah::Scrubber.new do |node| # strip tags if strip.include?(node.name) node.before node.children node.remove end # remove tags if remove.include?(node.name) node.remove end # prepare src attribute if node['src'] if node['src'].downcase.start_with?('http', 'ftp') node.before node.children node.remove end end # prepare links if node['href'] if node['href'].downcase.start_with?('http', 'ftp') node.set_attribute('rel', 'nofollow') node.set_attribute('target', '_blank') end if node['href'] =~ /javascript/i node.delete('href') end end # remove on* attributes node.each { |attribute, _value| next if !attribute.downcase.start_with?('on') node.delete(attribute) } end Loofah.fragment(string).scrub!(scrubber).to_s end end