我只是想知道如何在Ruby中转义SQL查询(字符串)以防止SQL注入。请注意我没有使用Rails框架。
感谢。
答案 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