如何在Ruby中转义字符串以防止SQL注入? (没有Rails)

时间:2009-02-08 22:50:20

标签: ruby sql-injection

我只是想知道如何在Ruby中转义SQL查询(字符串)以防止SQL注入。请注意我没有使用Rails框架。

感谢。

4 个答案:

答案 0 :(得分:17)

如果可能,使用Ruby DBI模块,而不是尝试引用字符串,使用参数化准备的查询,如下所示:

dbh = DBI.connect("DBI:Mysql:test:localhost", "testuser", "testpass")
sth = dbh.prepare("INSERT INTO people (id, name, height) VALUES(?, ?, ?)")
File.open("people.txt", "r") do |f|
  f.each_line do |line|
    name, height = line.chomp.split("\t")
    sth.execute(nil, name, height)
  end
end

报价将为您妥善处理,注射将成为过去。

编辑:请注意,此示例显示nil作为execute()的第一个参数传递。它对应第一个?在查询中,DBI模块将其转换为“NULL”。其他参数也被类似地正确引用并插入到查询中。

答案 1 :(得分:3)

您不必使用rails,您只需require 'activerecord'并像在rails中一样使用它(定义模型并使用它们)。你在那里做的只是重新发明轮子。

答案 2 :(得分:3)

编写一个wee函数来引用字符串。我认为Rails只使用这样的东西:

def quote_string(v)
  v.to_s.gsub(/\\/, '\&\&').gsub(/'/, "''")
end

答案 3 :(得分:1)

请勿尝试清理数据。使用预备陈述。另请参阅http://bobby-tables.com/ruby.html