【发布时间】:2018-08-23 14:02:43
【问题描述】:
所以我刚刚阅读了多个来源,使用 SQL 传递动态数据会使数据库受到 SQL 注入攻击:
我有一个 Rails 迁移,它将数据插入到连接表中:
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 注入攻击,因为这是一次性任务,之后我将通过强参数传递值,因为它们必须通过我的控制器。我这里有什么遗漏吗?
【问题讨论】:
-
g.players现在是什么?使用serialize的东西(即数据库中的 YAML 块)? PostgreSQLint[]列?还有什么? -
@muistooshort 抱歉回复晚了。这是一个
serialized数组 -
呃,
serialize使事情变得复杂,所以 Sean Huber 的回答是正确的方法。我还建议将数据库内的外键约束添加到您的新连接表中,这样您就会知道player_id和game_id是有效的ID;您可能希望在迁移数据之前执行此操作,以便清理serialize留下的任何损坏数据。
标签: ruby-on-rails ruby-on-rails-4 activerecord migration sql-injection