安全地链接用户生成的内容,同时在Rails中转义HTML字符

时间:2011-08-18 20:21:41

标签: ruby-on-rails

Rails 3.1删除了auto_link方法。它继续存在于插件中,但它从来没有像UGC那样工作。

运行auto_link后,您必须调用html_safe以获取要呈现的链接,从而导致任何UGC HTML也按原样显示。

是否有一个库可以html_escape或清理内容并安全地链接文本?这似乎是一个常见的用例,实现起来有点痛苦,所以我认为必须有一些东西。

例如:

<<script> do bad things </script> http://www.google.com?q=viagra&page=1

我想结束:

&lt;script&gt; do bad things &lt;/script&gt; <a href='http://www.google.com?q=viagra&amp;page=1'>http://www.google.com?q=viagra&amp;page=1</a>

1 个答案:

答案 0 :(得分:0)

Redcloth(http://redcloth.org/)可能就是您想要的。它不允许你使用普通的html(顺便说一句,这不是一个好主意),但它实际上支持完整的纺织标记语言,所以它也很灵活。 redcloth纺织参考(http://redcloth.org/textile/phrase-modifiers/#links)也显示了链接的语法。基本上,您可以使用它来消毒您想要的任何字符串。我自己将它用于带有before_safe指令的博客文章,所以 它总是在保存前被调用:

    class Article < ActiveRecord::Base
        before_save :parse_text

        def parse_text
            if RedCloth.nil?
                self.article_text = RedCloth.new(self.article_text).to_html
            end
        end
    end