2011-09-24 67 views
2

在Rails 3.1中,是否可以通过HAML中的markdown转义HTML以避免XSS?我的意思是当你做这样的事情:HAML中的markdown中的HTML转义HTML

:markdown 
    Hello #{@user.name} 

谢谢。

+1

您正在使用哪个rails版本?与轨道3,它应该由XSS安全。要从数据库列中插入html,您需要执行@ user.name.html_safe –

+0

@MarianTheisen,我正在运行Rails 3.1。 – Pablo

+0

@J.PabloFernández在将它传递给降价过滤器之前,可以实现您自己的自定义过滤器,以便将html转义出来...... –

回答

0

现在我创造了这个:

module Haml::Filters::SafeMarkdown 
    include Haml::Filters::Base 
    lazy_require "rdiscount", "peg_markdown", "maruku", "bluecloth" 

    def render(text) 
    engine = case @required 
       when "rdiscount" 
       ::RDiscount 
       when "peg_markdown" 
       ::PEGMarkdown 
       when "maruku" 
       ::Maruku 
       when "bluecloth" 
       ::BlueCloth 
      end 
    engine.new(Haml::Helpers.html_escape(text)).to_html 
    end 
end 

,并可以很容易地直接使用它:

module SafeMarkdown 
    def self.render(text) 
    Haml::Filters.defined["safemarkdown"].render(text).html_safe 
    end 
end 

这似乎现在的工作。有人有评论吗?

+0

不会使用这个意味着你想添加到markdown的任何内联html也会被转义?我一直在玩,并想出这个:https://gist.github.com/c1d81126463c128d5515如果你想。这比其他任何事情都更糟,所以我不认为这是值得自己回答的。如果你在这方面做了一些基础工作,请注意警告:“警告:Haml :: Compiler接口没有很好的记录,也没有保证稳定。如果你想使用它,你可能需要看看源代码并在升级到新的Haml版本时测试您的过滤器。“ – matt

+0

@matt:true,但我通常不希望HTML在降价,当我这样做,我手动处理这些字符串的安全。我不确定这个解决方案是否能够长期运作。 – Pablo