如何保护link_to @variable跨站点脚本漏洞

And*_*vey 5 ruby-on-rails brakeman

我刚刚开始使用brakeman gem来探索我的rails应用程序的安全漏洞.

除了几个跨站点脚本警告之外,我设法让一切都变得整洁.

这些都有以下共同点:

  • 它们都是link_to标签
  • 它们在类,alt或title属性中都有实例变量
  • 实例变量都表示包含关联模型的活动记录查询
  • 实例变量都是"可评论的".这描述了用户生成的注释的多态关联,类似于此Railscast的修订版本.

例如

<%= link_to "Click" , :class=> @model.association.attribute, :alt=> @model.association.attribute, :title=> @model.association.attribute, @model.association %>
Run Code Online (Sandbox Code Playgroud)

哪里

@model = @commentable = Model.includes(:association1, association2: {:nested-association1, :nested-association2}).find(params[:id])
Run Code Online (Sandbox Code Playgroud)

这是我需要关注/采取行动吗?我认为Rails 3.2默认会逃脱这些.

我欢迎建议,以帮助我更好地理解这个问题,并确定我应采取的步骤,如果有的话.

Jus*_*tin 4

我无法从您提供的代码中重现任何警告。您使用的是哪个版本的 Brakeman?实际的警告是什么(根据需要进行了编辑)?

怀疑您收到警告是因为在链接的 href 值中检测到用户输入。请参阅此拉取请求,了解有关为什么这可能很危险的更多信息。

不幸的是,如果没有更多信息,我无法判断这是需要修复的误报还是合法的警告。

编辑

好的,现在我在测试时看到警告@model = @commentable = ...这是 Brakeman 处理分配方式的问题。

如果您链接到模型的实例,则不应出现警告。如果您链接到模型属性,则这将被视为用户输入。

是的,Rails 会转义 HTML,但它不处理以javascript:data:开头的可用于 XSS 的链接。