如何编写活动记录查询

时间:2018-09-03 06:31:42

标签: ruby-on-rails sql-injection

我试图在Rails中创建一个可以动态调用的API,以返回不同时间段内数据的最小/最大/平均值。 我有一些这样的范围:

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

但是group方法不允许我执行参数和?像“哪里”这样的替代。

是否有安全的方法将参数放入Rails中SQL字符串的中间?

1 个答案:

答案 0 :(得分:0)

我能确定的唯一“安全”方法是通过白名单传递用户输入,例如可以通过.column_names获取的列名或用户可以应用的经过审核的合计函数列表在查询中。

直接在查询中插入用户输入将使您容易受到SQL注入攻击,对于这种相当特殊的情况,由于其用于绑定和清除值-而不是列名或SQL关键字(这将很危险),因此常规的清除方法不可用而且从框架POV来看很愚蠢。