gpt4 book ai didi

ruby-on-rails - 有没有办法在不准备函数的情况下使用占位符执行查询?

转载 作者:行者123 更新时间:2023-12-04 08:54:10 25 4
gpt4 key购买 nike

我的代码库存在我想要保护的潜在 SQL 注入(inject)漏洞。我的代码库中有一些查询,我将变量放在纯文本中,如下所示:

ActiveRecord::Base.connection.execute(
%{
SELECT ...
FROM ...
JOIN ...
WHERE ...
... model.foreign_id IN (#{array_of_ids})
GROUP BY 1;
}
)
我这样做是因为我认为不可能使用内置的 ActiveRecord 查询,因为查询的复杂性(我们想要控制更复杂的查询)。
我的第一个想法是使用 exec_query,但我发现我不能使用它。我在事务模式下使用 pgbouncer,所以prepared_statements 必须保持关闭。有没有办法在不准备函数的情况下使用占位符执行查询?

最佳答案

您可以使用 ActiveRecord 清理方法

ActiveRecord::Base.sanitize_sql(['? IN ?', 'foreign_key', [1, ';true=true']])

=> "'model_name.foreign_key' IN 1,';true=true'"
https://github.com/rails/rails/blame/8642c564dab37366c2ca8950b428d1aec84eb10d/activerecord/lib/active_record/sanitization.rb
https://github.com/rails/rails/commit/9d43a84f73c1b3853a91d052a462ee60eccaf957

关于ruby-on-rails - 有没有办法在不准备函数的情况下使用占位符执行查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63925620/

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