Rails 5白名单css属性,用于清理助手

时间:2017-01-30 17:41:26

标签: css ruby-on-rails ruby-on-rails-5 sanitize

我需要"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)

3 个答案:

答案 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想说的话。并且出于某种原因,只有当我做了我在这个答案中所做的事情时才会工作。所以我的答案是补充的我猜:)