gpt4 book ai didi

ruby-on-rails - ActiveRecord 用户提供的列名

转载 作者:数据小太阳 更新时间:2023-10-29 07:52:42 27 4
gpt4 key购买 nike

我试图让 Rails 应用程序的最终用户根据任意列的值限制结果。在最简单的情况下,我想做一些大致相当于:

"SELECT * FROM products WHERE (#{params[:min_col]} >= #{params[:min]})"

没有注入(inject)漏洞。

例如,example.com/myapp/catalog?min_col=sell_price&min=300 将返回 sell_price 大于或等于 $3.00 的所有产品

我尝试将这样的范围添加到模型中:

->(column,min) { where("? >= ?", column, min) }

并将 uri 参数传递给该范围,但这会产生

WHERE ('sell_price' >= '300')

这似乎只是比较两个文字字符串——这个查询和其他类似的查询总是返回每一行或不返回任何行。如何获得与 params 中指定的列进行比较所需的行为?

最佳答案

为了防止sql注入(inject),你应该验证列是有效的

valid_cols = ["c1", "c2"]
valid_cols.include?(column) or raise "Bad query"

然后你可以像以前一样使用查询界面

Model.where("#{column} >= ?", min)

关于ruby-on-rails - ActiveRecord 用户提供的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24152256/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com