在我的网站中,用户可以发表评论。我希望他们能够在评论中插入基本HTML,包括粗体,斜体和链接标签。不幸的是,Rails会自动转义所有用户生成的HTML。
我可以通过调用.html_safe来绕过这种行为,但随后我的网站容易受到XSS的攻击。有没有办法允许使用粗体,斜体和链接标签,同时还能逃避其他内容?
答案 0 :(得分:3)
您可以使用markdown之类的东西来支持通过替代(不是直接html)方式进行格式化。 Markdown可以通过一些rubygems支持,包括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>它是高度可配置的。
丝瓜络还会检查属性(取决于配置),以确保没有任何内容隐藏在禁用的属性中,例如onclick =“”