我需要"style=position: absolute;"
允许输出内联sanitize(post.content)
。我发现documentation for Rails 4表示
config.action_view.sanitized_allowed_css_properties = ['position']
application.rb中的会向白名单中添加属性,但是我无法找到Rails 5是否仍然存在的情况,并且在多次重启服务器后它似乎没有工作。有没有办法轻松添加白名单css属性?这个answer for Rails 4暗示了一个猴子补丁,但我不知道在哪里或如何这样做。
更新:安装gem rails-deprecated_sanitized允许上述配置行工作,因此看起来不推荐使用sanitized_allowed_css_properties。当然,在Rails 5中有一种方法可以做到这一点吗?我无法退回到4,我需要将内联样式位置列入白名单,以便让第三方插件正常工作(CKEditor + Iframely)
答案 0 :(得分:1)
您可以在Loofah中为 Rails 5清洁剂添加多个CSS属性到白名单。
Loofah::HTML5::WhiteList::ALLOWED_CSS_PROPERTIES.merge %w(position background-image left list-style min-width top z-index)
在application.rb
中添加上一行
(再次不确定这是多么安全)
答案 1 :(得分:0)
关闭this answer以及默认允许的属性列表here,我最终添加了
default_tags = Loofah::HTML5::WhiteList::ALLOWED_CSS_PROPERTIES.add('position')
到application.rb,默认情况下允许位置通过清理。不确定这是多么安全。
答案 2 :(得分:0)
我完全不知道@Jim Hogan试图用他的答案做什么。我尝试过它并没有用。所以我花了一些时间来分析一切,我找到了自己的答案:
我们从sanitize_css
获得了一个名为ActionController::Base.helpers
的助手。
那么为什么不通过提取原始样式来使用它呢? Nokogiri包含在Rails中> 4。
def patched_sanitize(html_tag_string)
sanitize html_tag_string, tags: %w(a b strong), attributes: manual_attributes
end
def manual_attributes
attributes = %w(href target align)
attributes << 'style' unless style_unsafe?
attributes
end
def style_unsafe?
ActionController::Base.helpers.sanitize_css(style_attributes_of(string)).empty?
end
def style_attributes_of(string)
Nokogiri::HTML(self.body).xpath('//body').children.map{|e| e.attr('style')}.join(' ')
end
编辑:好的,我想我终于明白了OP想说的话。并且出于某种原因,只有当我做了我在这个答案中所做的事情时才会工作。所以我的答案是补充的我猜:)