Rails HTML Permit Sanitizer无法正常工作

时间:2018-05-15 18:51:10

标签: html ruby-on-rails ruby sanitize

我一直在努力弄清楚如何使用Rails消毒剂。它似乎没有像我预期的那样工作。认为我误解了一些东西。

基本上,我尝试清理除divs以外的所有divs,其属性值为highlight。但是,例如,我试图在它上面使用PermitScrubber

我设置了我的标签和属性,并且继承自PermitScrubber,但它仍然擦除了我允许的标签和属性:

class ExampleScrubber < Rails::Html::PermitScrubber
  def initialize
    super
    self.tags = %w(img),
    self.attributes = %w(src alt)
  end

  # commented out for the example, but what I'm trying to ultimately do
  # def allowed_node?(node)
    # node.name == "div" && node.attributes.values.first.value = "highlight"
  # end
end

@comment.body = "<ul>\n<li>yes</li>\n<li>tests</li>\n</ul>\n\n<p><img src=\"something.jpeg\" alt=\"something\"></p>\n"
ActionController::Base.helpers.sanitize(
  @comment.body,
  scrubber: ExampleScrubber.new
)
#=> "\nyes\ntests\n\n\n\n"

所以有两件事:  1.为什么要清除img代码以及srcalt属性?  2.我知道我可以重构allowed_node?方法,但我想先弄清楚第一位。

感谢您阅读✌️

1 个答案:

答案 0 :(得分:2)

第一个问题(“为什么[此]清除 switch (item) { case "Color": fruitData.Description = fruitDetails.Color; break; case "Price": fruitData.Description = fruitDetails.Price; break; case "Nutrient": fruitData.Description = fruitDetails.Nutrient; break; default: break; } 标记以及imgsrc属性?”)是由数组后的逗号逗号引起的。

alt

TIL Ruby不需要数组的方括号:

#             Here v
self.tags = %w(img),

因此,该逗号将您的a = "b", "c" # => ["b", "c"] 转换为数组数组:

tags

导致问题并允许清除标记。删除逗号会使事情正常工作:

ExampleScrubber.new.tags # => [["img"], ["src", "alt"]]

为了实现您的目标,只保留class ExampleScrubber < Rails::Html::PermitScrubber def initialize super self.tags = %w(img) self.attributes = %w(src alt) end # commented out for the example, but what I'm trying to ultimately do # def allowed_node?(node) # node.name == "div" && node.attributes.values.first.value = "highlight" # end end body = "<ul>\n<li>yes</li>\n<li>tests</li>\n</ul>\n\n<p><img src=\"something.jpeg\" alt=\"something\"></p>\n" ActionController::Base.helpers.sanitize(body, scrubber: ExampleScrubber.new) # => "\nyes\ntests\n\n\n<img src=\"something.jpeg\" alt=\"something\">\n" ,并且只有当他们拥有包含“突出显示”一词的属性(任何属性)时,您才可以尝试以下内容:

divs