在Rails 3.1中,是否可以通過HAML中的markdown轉義HTML以避免XSS?我的意思是當你做這樣的事情:HAML中的markdown中的HTML轉義HTML
:markdown
Hello #{@user.name}
謝謝。
在Rails 3.1中,是否可以通過HAML中的markdown轉義HTML以避免XSS?我的意思是當你做這樣的事情:HAML中的markdown中的HTML轉義HTML
:markdown
Hello #{@user.name}
謝謝。
現在我創造了這個:
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
這似乎現在的工作。有人有評論嗎?
不會使用這個意味着你想添加到markdown的任何內聯html也會被轉義?我一直在玩,並想出這個:https://gist.github.com/c1d81126463c128d5515如果你想。這比其他任何事情都更糟,所以我不認爲這是值得自己回答的。如果你在這方面做了一些基礎工作,請注意警告:「警告:Haml :: Compiler接口沒有很好的記錄,也沒有保證穩定。如果你想使用它,你可能需要看看源代碼並在升級到新的Haml版本時測試您的過濾器。「 – matt
@matt:true,但我通常不希望HTML在降價,當我這樣做,我手動處理這些字符串的安全。我不確定這個解決方案是否能夠長期運作。 – Pablo
您正在使用哪個rails版本?與軌道3,它應該由XSS安全。要從數據庫列中插入html,您需要執行@ user.name.html_safe –
@MarianTheisen,我正在運行Rails 3.1。 – Pablo
@J.PabloFernández在將它傳遞給降價過濾器之前,可以實現您自己的自定義過濾器,以便將html轉義出來...... –