2015-04-17 1 views
3

Я использую squeel gem в моем проекте, и у меня есть код что-то вроде этого:Возможные инъекции SQL

def self.search(query) 
    return self.scoped if query.blank? 

    self.joins(:supplier).where{lower(supplier.supplier_name).like_any(["%#{query}%"])} 
    end 

Мои вопросы этот код уязвимым для инъекции SQL? И как мне это исправить? Я пытался сделать sanitize(query), но это только добавляет дополнительный набор цитат и SQL оператор не получает генерируется соответствующим

+0

Является ли это от Sequel? Похоже, что это может быть от Squeel gem вместо: https://github.com/activerecord-hackery/squeel - проясните, потому что уязвимость или не SQL-инъекция будет зависеть от той библиотеки. Я подозреваю, что это * не * уязвимо, хотя большинство этих библиотек тщательно избегают параметров, используемых для запросов. –

+0

@NeilSlater, вы правы, позвольте мне отредактировать вопрос, не стесняйтесь ответить спасибо –

+1

Ну, я мог бы ответить, если это было Sequel. , , но у меня нет ActiveRecord db, и я не знаю точно, хотя я подозреваю, что ваш код не уязвим. Надеюсь, кто-то, кто лучше знает, сможет ответить с большей уверенностью. –

ответ

1

ОБНОВЛЕНО:

Squeel будет автоматически избежать строки, поэтому ваш запрос в порядке и не будет откройте вас до инъекции. См question about sql injection - Squeel - Github

OLD (неверный) ОТВЕТ: Это активная запись версии

Кто-то поправьте меня, если я ошибаюсь, но так как вы передаете в # {запроса} в виде строки и не аргумент, тогда вы открываете себя для инъекций. См the docs for passing in arguments

Используя аргументы избежит 'QUERY' Струнные

ваш запрос, используя аргументы:

self.joins(:supplier).where{lower(supplier.supplier_name).like_any(["%"+?+"%"], query)}