ruby-on-rails - Rails 'raw' 助手

标签 ruby-on-rails helpers

在可能有很多用户的 Rails 应用程序中使用“原始”助手是否安全?

我会将 TinyMCE 与我的应用程序集成,以便用户将 HTML 内容添加到某种形式的帖子中。使用“原始”显示其内容是否存在安全问题?

或者有更合适的做事方式吗?

谢谢!

最佳答案

来自fine manual :

This method outputs without escaping a string. [...] This is not recommended if the data is coming from the user’s input.

所以,是的,使用 raw 可能会有点安全问题(对您的用户而言),除非您正确清理传入的 HTML。

您不应该信任客户。即使您使用一组有限的标签设置了 TinyMCE,您也无法保证您的服务器收到的 HTML 确实来自 TinyMCE,或者有人没有以某种方式解决 TinyMCE。

如果您接受来自用户的 HTML,那么您需要在存储之前将标签和属性列入白名单。

您可以使用 Nokogiri按标签解析传入的 HTML 标签,如果标签在您的白名单中,则让它通过,如果您没有明确允许该标签(即它不在您的白名单中),则将其丢弃。而且,您需要检查允许通过的标签上的属性,以便只有您希望通过的属性和属性值。任何不在白名单上的标签、属性或属性值都会被丢弃。清理传入的 HTML 后,您可以存储它并使用 raw 帮助程序安全地将其呈现给用户。

这种增加的复杂性是许多网站使用 Markdown、BB-Code 或其他生成 HTML 的标记语言的原因之一。

关于ruby-on-rails - Rails 'raw' 助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6166146/

相关文章:

ruby-on-rails - 未定义的方法 'link_to'

javascript - 关闭 Bootstrap 警报

ruby-on-rails - 如何为一项特定操作定义 Rails Helper?

ruby-on-rails - 未初始化的常量 ActiveSupport::Concern

ruby-on-rails - Rails : controller method or instance variable inside a helper

events - 如何在模板中使用动态参数调用 meteor 助手

ruby-on-rails - 尝试创建新记录时为"no implicit conversion of Symbol into String"

ruby-on-rails - 如何使用send_file下载文件?

javascript - 图片资源可用于 CSS 文件而不是 JS 文件——为什么?

php - Laravel 5 - link_to_route() 方法通过在末尾添加 "?"使我的路由参数变为查询字符串