在 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
所以我刚刚阅读了多个来源,使用 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