首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails brakeman订单sql注入

rails brakeman订单sql注入
EN

Stack Overflow用户
提问于 2012-11-29 13:06:32
回答 2查看 2.7K关注 0票数 5

在从参数构造order方法时,如何避免Rails中的刹车人警告?

代码语言:javascript
复制
def index
  @methods = [:name, :manager, :deadline]
  assignments = Assignment.order(sort_column(@methods) + " " + sort_direction).received(current_user).root
end

def sort_column(column_names)
  column_names.each do |column|
    return column if column == params[:sort]
  end
  return 'updated_at'
end

def sort_direction
  params[:direction] == 'asc' ? 'asc' : 'desc'
end

我正在努力避免将用户生成的代码直接放到查询中,但brakeman仍然警告(中等信心)这是一个SQL注入漏洞。

这是假阳性吗?如果没有,我该如何纠正这个漏洞?

如果是这样,有没有一种简单的方法来避免误报?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-02 00:54:58

好吧,这段评论太长了。

根据我的测试,将字符串构建移动到像这样的方法中确实会使警告消失:

代码语言:javascript
复制
def index
  @methods = [:name, :manager, :deadline]
  assignments = Assignment.order(sort_order).received(current_user).root
end

def sort_order
  sort_column(@methods) + " " + sort_direction
end

然而,这只是隐藏了问题。我建议在Assignment模型中添加类似这样的内容:

代码语言:javascript
复制
class Assignment < ActiveRecord::Base

  def self.sorted_by(column, direction)
    direction = direction.downcase == 'asc' ? 'asc' : 'desc'
    column = sanitize_sql(column)
    order("#{column} #{direction}")
  end

end

请记住,有时你必须在保持工具满意和保持代码合理之间做出选择。至于假阳性,我不认为这个问题会得到解决,因为检查sort_column并知道它是安全的并不简单。

票数 8
EN

Stack Overflow用户

发布于 2012-11-29 15:28:41

您可以在order by子句上添加一个清理方法

代码语言:javascript
复制
 assignments = Assignment.order(ActiveRecord::Base::sanitize(sort_column(@methods) + " " + sort_direction)).received(current_user).root
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13619195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档