【问题标题】:Allowing only Youtube/Vimeo iframes in markdownmarkdown 中仅允许 Youtube/Vimeo iframe
【发布时间】:2011-02-10 04:01:10
【问题描述】:

我正在尝试允许用户在我们正在开发的 Rails3 应用程序的帖子中嵌入 youtube 或 vimeo 视频,并且现在两者都使用 iframe。 sanitize helper 似乎只允许您在全球范围内将标签列入白名单 - 此外,youtube 的 iframe 有一个一致的类,但 vimeo 没有。

您将如何将这两个网址中的嵌入列入白名单,但不允许它们?

【问题讨论】:

  • 你有没有想过这个问题?如果是这样,我很感兴趣。

标签: ruby-on-rails iframe youtube xss markdown


【解决方案1】:

我不确定如何使用 sanitize 方法将标签列入白名单,但您始终可以通过另一种方法进行过滤,并使用正则表达式专门检查 src,并且仅在它与 youtube 匹配时才写出来。

def santize_iframe(text)
  text.gsub(/\<iframe( src="(.+?)")?\>(.+?)\<\/iframe\>/m) do
    if $2.include? "youtube.com"
        ... logic to display video
    else
        ""
    end
  end
end

【讨论】:

    【解决方案2】:

    http://github.com/rgrove/sanitize/

    这是一个很棒的项目,还提供了一个 youtube 嵌入示例。 Youtube 最近更改为 iframe,我正在向他们提交一个“过滤器”示例:

    T_YOUTUBE_IFRAME = lambda do |env|
     node      = env[:node]
     return nil unless (env[:node_name] == 'iframe')
    
     if node['src'] =~ /^http:\/\/www.youtube.com\/embed\//
       node['src'] += "?test" 
    
       return {:node_whitelist => [node]}
     end
    end
    

    【讨论】:

      猜你喜欢
      • 2011-06-11
      • 1970-01-01
      • 2016-11-29
      • 2017-05-24
      • 2020-08-11
      • 1970-01-01
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多