Как написать "f" e запросы Active Record - PullRequest
0 голосов
/ 03 сентября 2018

Я попытался создать API в Rails, который мог бы вызываться динамически, чтобы возвращать минимальные / максимальные / средние значения для данных за различные периоды времени. У меня есть несколько таких областей:

  scope :span, ->(span) { group("date_round_down(device_time, '#{span}')::timestamp without time zone") }
  scope :func, ->(func) { calculate("#{func}", 'point_data_val') }

Но групповой метод не позволяет мне использовать params, а? подстановка типа 'где' делает.

Есть ли безопасный способ получить аргументы в середине строк SQL в Rails?

1 Ответ

0 голосов
/ 03 сентября 2018

Единственный «безопасный» способ, который я могу выяснить, - это передача пользовательского ввода через белый список, например, имена столбцов, которые можно получить через .column_names, или проверенный список приемлемых агрегатных функций, которые пользователь может применять в запрос.

Непосредственная интерполяция пользовательского ввода в запросе оставит вас открытыми для атаки с использованием SQL-инъекций, и обычная санитария не может быть использована для этого довольно особого случая, поскольку она используется для связывания и санации значений, а не имен столбцов или ключевых слов SQL, которые могут быть опасными. и весьма тупой из рамок POV.

...