我试图在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字符串的中间?
答案 0 :(得分:0)
我能确定的唯一“安全”方法是通过白名单传递用户输入,例如可以通过.column_names
获取的列名或用户可以应用的经过审核的合计函数列表在查询中。
直接在查询中插入用户输入将使您容易受到SQL注入攻击,对于这种相当特殊的情况,由于其用于绑定和清除值-而不是列名或SQL关键字(这将很危险),因此常规的清除方法不可用而且从框架POV来看很愚蠢。