在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转义出来...... –