【问题标题】:Escape HTML in markdown in HAML在 HAML 中的 markdown 中转义 HTML
【发布时间】:2011-11-24 08:49:29
【问题描述】:

在 Rails 3.1 中,是否可以在 HAML 中的 markdown 中转义 HTML 以避免 XSS?我的意思是当您执行以下操作时:

:markdown
  Hello #{@user.name}

谢谢。

【问题讨论】:

  • 您使用的是哪个版本的 Rails?使用 rails 3,它应该通过 XSS 安全。要从数据库列插入 html,您需要执行 @user.name.html_safe
  • @MarianTheisen,我正在运行 Rails 3.1。
  • @J.PabloFernández 可以实现自己的自定义过滤器,在将 html 传递给降价过滤器之前将其转义...
  • @YetAnotherGeek:显然我必须这样做。

标签: html ruby-on-rails xss haml markdown


【解决方案1】:

现在我创建了这个:

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

它现在似乎有效。有人评论吗?

【讨论】:

  • 不使用这意味着您想要添加到降价的任何内联 html 也会被转义?我一直在玩,想出了这个:gist.github.com/c1d81126463c128d5515,如果你愿意的话。这比什么都重要,所以我认为它不值得自己回答。如果您确实以此为基础,请注意警告:“警告:Haml::Compiler 接口既没有很好的文档记录,也没有保证是稳定的。如果您想使用它,您可能需要查看源代码,并在升级到新的 Haml 版本时测试您的过滤器。”
  • @matt: 是的,但我通常不希望在 markdown 中使用 html,当我这样做时,我会手动处理这些字符串的安全性。我不确定这个解决方案是否长期有效。
猜你喜欢
  • 2011-06-09
  • 1970-01-01
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 2022-12-03
  • 1970-01-01
相关资源
最近更新 更多