在 rails 迁移中执行 sql 会导致 sql 注入攻击?

Executing sql in rails migration opens to sql injection attacks?

所以我刚刚阅读了多个来源,使用 SQL 传递动态数据会打开数据库以 SQL 注入攻击:

我有一个 rails 迁移,它将数据插入到连接 table 中:

class MovePlayerToJoinTable < ActiveRecord::Migration
  def change
    games = Game.all
    games.each do |g|
      g.players.each do |p|
        execute "insert into games_players (player_id, game_id) values (#{p}, #{g.id})"
      end
    end
  end
end

我不确定以上内容如何让我受到 SQL 注入攻击,因为这是一次性任务,之后我将通过强参数传递值,因为它们必须通过我的控制器。我在这里遗漏了什么吗?

您的示例不太可能面临 sql 注入的风险。无论如何,在 Rails 中清理原始 sql 碎片是一个很好的做法:http://api.rubyonrails.org/classes/ActiveRecord/Sanitization/ClassMethods.html

示例:

class MovePlayerToJoinTable < ActiveRecord::Migration
  def change
    games = Game.all
    games.each do |g|
      g.players.each do |p|
        query = sanitize_sql_array(['insert into games_players (player_id, game_id) values (?, ?)', p.id, g.id])
        connection.execute(query)
      end
    end
  end
end