2011-09-24 88 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