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

时间:2012-07-03 15:39:01

标签: ruby-on-rails brakeman

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

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

这些都有以下共同点:

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

e.g

<%= link_to "Click" , :class=> @model.association.attribute, :alt=> @model.association.attribute, :title=> @model.association.attribute, @model.association %>

其中

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

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

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

1 个答案:

答案 0 :(得分:4)

我无法从您提供的代码中重现任何警告。您使用的是什么版本的Brakeman?什么是实际警告(必要时编辑)?

怀疑您收到警告,因为在链接的href值中检测到用户输入。有关可能导致此危险的详细信息,请参阅this pull request

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

修改

好的,现在我在使用@model = @commentable = ...进行测试时看到了警告这是Brakeman如何处理作业的问题。

如果要链接到模型的实例,则应该没有警告。如果要链接到模型属性,则将其计为用户输入。

是的,Rails会转义HTML,但它不会处理以javascript:开头的data:或{{1}}的链接{/ 3}}。