Ruby on rails Rails 3-原始和html_安全问题
在Rails 3.0.10中使用raw和html安全方法,我仍然无法取消对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
内容
@object.property.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进行排序。如何防止表单将其保存为已转义?也许可以就此问题提出另一个问题?