gpt4 book ai didi

ruby-on-rails - Rails sanitize 删除默认允许的标签

转载 作者:行者123 更新时间:2023-12-04 19:43:11 28 4
gpt4 key购买 nike

我将如何使用 sanitize,但告诉它禁止某些默认启用的标签? documentation声明我可以将其放入我的 application.rb

config.after_initialize do
ActionView::Base.sanitized_allowed_tags.delete 'div'
end

我可以将其作为参数传递给 sanitize 吗?

最佳答案

是的,您可以在每次调用的基础上指定允许哪些标签和属性。来自fine manual :

Custom Use (only the mentioned tags and attributes are allowed, nothing else)

<%= sanitize @article.body, :tags => %w(table tr td), :attributes => %w(id class style) %>

但问题在于 :tags必须包含您要允许的所有标签。

sanitize文档说到

See ActionView::Base for full docs on the available options.

但文档是谎言,ActionView::Base对可用选项只字未提。

所以,像往常一样,我们必须深入挖掘源代码,希望他们不要默默地更改界面。稍微追踪一下代码 yields this :

def tokenize(text, options)
options[:parent] = []
options[:attributes] ||= allowed_attributes
options[:tags] ||= allowed_tags
super
end

def process_node(node, result, options)
result << case node
when HTML::Tag
if node.closing == :close
options[:parent].shift
else
options[:parent].unshift node.name
end

process_attributes_for node, options

options[:tags].include?(node.name) ? node : nil
else
bad_tags.include?(options[:parent].first) ? nil : node.to_s.gsub(/</, "&lt;")
end
end

options[:tags] 的默认值在tokenize和方式options[:tags]用于 process_node感兴趣并告诉我们如果 options[:tags]有任何东西,那么它必须包含整套允许的标签,并且没有任何其他选项可以控制标签集。

此外,如果我们查看 sanitize_helper.rb ,我们看到 sanitized_allowed_tags 只是 allowed_tags 的包装器在白名单 sanitizer 中:

def sanitized_allowed_tags
white_list_sanitizer.allowed_tags
end

您应该能够添加自己的助手来执行类似这样的操作(未经测试的代码):

def sensible_sanitize(html, options)
if options.include? :not_tags
options[:tags] = ActionView::Base.sanitized_allowed_tags - options[:not_tags]
end
sanitize html, options
end

然后你可以

<%= sensible_sanitize @stuff, :not_tags => [ 'div' ] %>

使用除<div> 之外的标准默认标签.

关于ruby-on-rails - Rails sanitize 删除默认允许的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7542312/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com