1

在我的网站上,用户可以发表评论。我希望他们能够在他们的评论中插入基本的 HTML,包括粗体、斜体和链接标签。不幸的是,Rails 会自动转义所有用户生成的 HTML。

我可以通过调用 .html_safe 来绕过这种行为,但这样我的网站就容易受到 XSS 的攻击。有没有办法允许粗体、斜体和链接标签,同时仍然转义其他内容?

4

1 回答 1

3

您可以使用诸如降价之类的东西通过替代方式(不是直接使用 html)来支持格式化。Markdown 可以通过许多 ruby​​gems 来支持,包括 Redcarpet、markitup 等。Markdown 为粗体/斜体等创建了一种替代语法(如 bbcode)。

https://github.com/jwigal/markitup_rails

您还可以使用像 Loofah 这样的白名单消毒剂 - https://github.com/flavorjones/loofah/。Loofah 是一种更高端的解决方案,支持您想要的任何 html 标签。用户将提交 HTML,然后 Loofah 将读取它,并使用 nokogiri 构建一个 html 节点树。然后它遍历树,确保所有标签节点都使用列入白名单的 html 标签,允许您允许任何您想要的标签组合,包括 <a>、<img>、<table> 等。它是高度可配置的。

Loofah 还会检查属性(取决于配置),以确保在 onclick="" 等禁止属性中没有隐藏任何内容

于 2012-08-17T23:18:27.460 回答