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
)
我正在使用 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
)