Ruby on rails Rails 3-原始和html_安全问题

Ruby on rails Rails 3-原始和html_安全问题,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,在Rails 3.0.10中使用raw和html安全方法,我仍然无法取消对html的浏览,并使其显示为内容,而不是内容 @object.property.html\u safe为我提供了一些内容 也给了我一些内容 我看过这些帖子,并尝试实施它们的修复: 我还观看了Ryan Bates Railscasts关于xss保护的一集: 我根据他的示例创建了一个名为safe的助手方法,我确保字符串内容应用了html\u-safe方法: def safe(content) "#{conte

在Rails 3.0.10中使用raw和html安全方法,我仍然无法取消对html的浏览,并使其显示为内容,而不是
内容

@object.property.html\u safe
为我提供了一些内容

也给了我
一些内容

我看过这些帖子,并尝试实施它们的修复:

我还观看了Ryan Bates Railscasts关于xss保护的一集:

我根据他的示例创建了一个名为safe的助手方法,我确保字符串内容应用了html\u-safe方法:

def safe(content)
    "#{content}".html_safe
end
然后我在我的模型上调用它:
safe(@object.property)

但内容仍没有按预期显示

我也尝试过使用消毒方法,但没有效果


是什么原因造成的?

好的,看来我现在已经让它工作了

查看Ruby文档,找到了CGI类和unescapeHTML方法

我在表单中使用富文本编辑器将文本保存到数据库中。显然,由于html是以转义的形式发送到数据库的,所以我需要撤消转义,然后对其调用html\u safe

这是它在数据库中的显示方式:
stronghowdy/strong

我将其应用于我的助手方法,现在html显示为html而不是标记

def safe(content)
  "#{ CGI::unescapeHTML(content) }".html_safe
end
这是可行的,但如果有更好的方法来处理这种情况,我愿意接受建议

更新


我正在试验Rails助手方法,试图阻止文本以转义的形式保存到数据库中(这将解决我的问题,因为从那时起,我就不必取消转义)

事实证明,我使用的富文本编辑器正在对html进行编码——您必须在javascripts对象文字符号中向它传递
encoded:false
属性

因此,如果您像我一样,试图找出Rails将文本以编码方式保存到数据库的原因,您可能需要调整富文本编辑器本身的配置

现在,我可以删除CGI类并将其用作助手:

def safe(content)
  "#{ content }".html_safe
end

希望其他人也会觉得这很有帮助。

这里有另一个选择,也许是更好的选择。使用以下代码段

plain_text = strip_tags(html_input)

这是指向文档的链接。

您希望得到什么样的输出?您的前两个代码示例完全符合它们的要求。你真的想让它逃走吗?(例如,
strong某些内容…
)只是尝试获取要显示的实际html,而不是标记。更新了具体的问题。更好的处理方法是,如果要使转义HTML呈现为未转义的,则不要将其存储在数据库中
:)
。我已尝试在表单的文本区域使用raw和HTML安全方法,但它仍将其作为转义HTML进行排序。如何防止表单将其保存为已转义?也许可以就此问题提出另一个问题?