gpt4 book ai didi

ruby-on-rails - rails 。使用占位符和字符串时如何从查询条件中删除引号?

转载 作者:行者123 更新时间:2023-12-04 06:00:50 25 4
gpt4 key购买 nike

我正在尝试创建一个搜索表单(rails 3.1),其中一个搜索参数允许用户选择 <、>、= 等数学符号。然后我想使用选择的值作为查询的一部分。唯一的问题是它在它周围加上引号并导致无效的sql。

简化示例

params[:comparison] = '>'
params[:rank] = '3'

.where("rank ? ?", params[:comparison], params[:rank].to_i)

结果是
PGError: ERROR:  syntax error at or near "3"
LINE 1: ... WHERE (rank '>' 3)

我想让它
WHERE (rank > 3)

如何以一种参数安全且不易受到 SQL 注入(inject)攻击的方式创建此事件记录查询,而无需在大于符号周围加上引号?

最佳答案

在这种非常特殊的情况下,我建议您只检查 params[:comparison] 的值因为您可以轻松地将其与您期望的已知安全值“列入白名单”,我假设它们是 <、> 和 =

示例代码:

known_comparisons = %w{< > =}
params_comparison = ">"

if known_comparisons.any? { |i| i === params_comparison }
puts "were good"
else
puts "bad value"
end

然后使用字符串插值直接嵌入该值,因为您现在确定它是安全的。
.where("rank #{params[:comparison]} ?", params[:rank].to_i)

关于ruby-on-rails - rails 。使用占位符和字符串时如何从查询条件中删除引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8918966/

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