Как избежать строки в Ruby для защиты от SQL-инъекций? (Без рельсов) - PullRequest
14 голосов
/ 09 февраля 2009

Я просто хотел узнать, как мы можем избежать SQL-запроса (строки) в Ruby, чтобы предотвратить SQL-инъекцию. обратите внимание, я не использую Rails Framework.

Спасибо.

Ответы [ 4 ]

17 голосов
/ 09 февраля 2009

Если возможно, используйте модуль 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

Цитирование будет обработано для вас должным образом, а инъекции останутся в прошлом.

Edit: обратите внимание, что в этом примере показано, что nil передается в качестве первого параметра для execute (). Это соответствует первому? в запросе и переводится в «NULL» модулем DBI. Другие параметры аналогично правильно указаны и вставлены в запрос.

3 голосов
/ 08 марта 2010

Напишите крошечную функцию для цитирования строк. Я думаю, что Rails просто использует что-то вроде этого:

def quote_string(v)
  v.to_s.gsub(/\\/, '\&\&').gsub(/'/, "''")
end
3 голосов
/ 09 февраля 2009

Вам не нужно использовать рельсы, вы можете просто require 'activerecord' и использовать его, как если бы вы использовали рельсы (определите модели и используйте их). То, что вы делаете, это просто изобретаете колесо.

1 голос
/ 11 марта 2010

Не пытайтесь дезинфицировать ваши данные. Используйте готовые заявления. Смотрите также http://bobby -tables.com / ruby.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...