Rails' 的普通 XSS 保护有多防弹?

How bulletproof is Rails' stock XSS protection?

在 Rails 4.2.4 中,假设我有一个带有文本字段的表单,用户可以在其中输入他们想要的任何内容。我根本不清理输入。然后用户将表单提交到控制器方法,如下所示:

def datahandler
   @data = params[:usersdata]
end

然后在相关视图中,"datahandler.html.erb",我有以下内容:

<%= @data %>

应该是一个巨大的XSS漏洞吧?好吧,看起来 Rails 现在会自动将字符串对象中的某些字符转换为 CDATA 表示形式以供其查看。这似乎至少打破了我发现的 XSS 攻击示例。

但是,由于我不是 XSS 漏洞方面的专家,所以在没有进行一些研究的情况下我不太愿意依赖这种机制。此外,Rails Guides 似乎没有谈论这个功能,即使在他们的安全指南中也是如此(他们谈论防御 XSS 但他们没有提到这个功能)。我还没有找到任何关于此的文档。

任何人都可以指出一些关于此功能的文档吗?如果没有,有谁知道这种保护有什么漏洞吗(请举例说明)?

据我所知,默认情况下它不会这样做,但它有一个保护机制,可以在你想使用它的情况下为你做到这一点 http://guides.rubyonrails.org/security.html#injection

Rails' stock XSS 保护非常防弹。

默认行为是 changed in Rails 3, to "escape HTML output ... by default in all view templates". Although there have been cases where the escaping needed to be adjusted, most of the known XSS vulnerabilities in Rails have not been centered around this functionality

无论如何,你问题中的代码应该是相当安全的。 Rails 中当前 XSS 保护的主要问题是由 developers misunderstanding the mechanics of the process. Taking the time to fully understand the implementation 引起的,尽管有内置保护,这将确保您不会无意中引入 XSS 错误。