我刚刚开始使用刹车员 gem 来探索我的 rails 应用程序是否存在安全漏洞。
我已经设法让一切整洁,除了几个跨站点脚本警告。
它们都具有以下共同点:
- 它们都是link_to标签
- 它们在类、alt 或标题中都有实例变量属性
- 实例变量都表示一个活动记录查询包括相关模型
- 实例变量都是"可注释的"。这描述了用户生成评论的多态关联,类似于此 Railscast 的修订版本。
例如
<%= 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 默认转义这些。
我欢迎建议来帮助我更好地理解这个问题,并确定我应该采取的步骤(如果有的话)。
我无法从您提供的代码中重现任何警告。你使用的是哪个版本的刹车人?实际警告是什么(必要时编辑)?
我怀疑您收到警告是因为在链接的 href 值中检测到用户输入。有关为什么这可能很危险的更多信息,请参阅此拉取请求。
不幸的是,如果没有更多信息,我无法判断这是需要修复的误报还是合法的警告。
编辑:
好的,现在我在测试时看到警告@model = @commentable = ...
这是 Brakeman 如何处理任务的问题。
如果要链接到模型的实例,则不应有任何警告。如果要链接到模型属性,则将其计为用户输入。
是的,Rails 会转义 HTML,但它不处理以 javascript:
或 data:
开头的链接,这些链接可用于 XSS。