Ruby,如何防止 Redcarpet 在输出中呈现 HTML 代码?

Ruby, How to prevent Redcarpet to render HTML code in the output?

我正在使用 Redcarpet 渲染用户介绍的网页数据。

我发现用户很容易引入恶意 HTML 代码。

我正在尝试不同的 Redcarpet 初始化程序选项,以防止在输出中呈现任何可能的恶意代码,但没有任何效果:

正在尝试 filter_html

markdown =
  Redcarpet::Markdown.new(
    Redcarpet::Render::HTML,
    filter_html: true
  )

markdown.render("<style>style</style> <script>alert()</script>")

# => "<p><style>style</style> <script>alert()</script></p>\n"

正在尝试 scape_html

markdown =
  Redcarpet::Markdown.new(
    Redcarpet::Render::HTML,
    escape_html: true
  )

markdown.render("<style>style</style> <script>alert()</script>")

# => "<p><style>style</style> <script>alert()</script></p>\n"

这些是渲染器的选项,而不是解析器,所以你需要将它们传递给渲染器,然后将配置好的渲染器传递给解析器,例如:

markdown =
  Redcarpet::Markdown.new(
    Redcarpet::Render::HTML.new(escape_html: true),
    # other parser options here, e.g.
    autolink: true
  )