Rails Gem sanitize - 如何将白名单和

问题描述 投票:10回答:4

现在我们正在使用消毒宝石:https://github.com/rgrove/sanitize

问题是,如果你输入“hello & world”,sanitize将在DB中保存为:

hello & world 

你如何将&列入白名单。我们希望清理删除所有可能的恶意html和JS /脚本标记。但是我们可以使用&符号。

想法?谢谢

ruby-on-rails ruby-on-rails-3 gem sanitize
4个回答

3
投票

Sanitize将始终将输出的内容转换为有效html / xhtml的html实体。

我可以确定的最好方法是过滤输出

Sanitize.fragment("hello & world").gsub('&','&') #=> "Hello & world"

1
投票

UnixMonkey的答案就是我们最终做的事情。

def remove_markup(html_str)
    marked_up = Sanitize.clean html_str

    ESCAPE_SEQUENCES.each do |esc_seq, ascii_seq|
      marked_up = marked_up.gsub('&' + esc_seq + ';', ascii_seq.chr)
    end
    marked_up
  end

ESCAPE_SEQUENCES是我们不希望转义的字符数组。


0
投票

从Rails 4.2开始,#strip_tags不会对HTML特殊字符进行编码

strip_tags("fun & co")
  => "fun & co"

否则你会得到以下内容:

strip_tags("<script>")
  => "<script>"

如果你只想要&符号我建议过滤输出像@Unixmonkey建议的那样只保留到&

strip_tags("<bold>Hello & World</bold>").gsub(/&amp;/, "&")
  => "Hello & World"
© www.soinside.com 2019 - 2024. All rights reserved.