首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Arel语法时Rails Brakeman SQL注入警告

使用Arel语法时Rails Brakeman SQL注入警告
EN

Stack Overflow用户
提问于 2012-11-29 11:33:24
回答 1查看 852关注 0票数 0

在我的Rails 3.2应用程序中,制动器 1.8.3为模型中的以下代码引发了一个高可信度的SQL注入警告:

micropost.rb

代码语言:javascript
复制
def self.from_users_followed_by(user)
  followed_user_ids = Relationship.select(:followed_id).
                      where("follower_id = :user_id").
                      to_sql
  where("user_id IN (#{followed_user_ids}) OR user_id = :user_id",
        user_id: user.id)
end

但是,当我将代码更改为不使用Arel语法时,不会引发警告:

代码语言:javascript
复制
def self.from_users_followed_by(user)
  followed_user_ids = "SELECT followed_id FROM relationships
                       WHERE follower_id = :user_id"
  where("user_id IN (#{followed_user_ids}) OR user_id = :user_id",
        user_id: user.id)
end

这是假阳性,还是与Arel语法或to_sql方法有关.?我不明白在两个值得警告的示例中执行的实际代码之间有什么区别。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-29 15:09:48

是假阳性。

在这种情况下,Brakeman知道Relationship是一个模型,selectwhere是查询方法。因此,它假定Relationship.select(...).where(...).to_sql是一个记录属性(并且具有潜在的危险性)。但是,它不应该这样做,因为正如您提到的那样,to_sql只是为查询生成SQL代码。我来解决这个问题。

当然,第二个版本不会发出警告,因为您正在插入字符串文本。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13624870

复制
相关文章

相似问题

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