You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Arel::Nodes::Quoted在NamedFunctions中防注入是否为最优方案?

问题解答

当前写法的安全性

你的代码是安全的,原因如下:

  • Arel::Nodes::Quoted的核心作用就是将传入的内容作为SQL安全字面量处理,它会自动对特殊字符(比如单引号、分号等注入常用字符)进行转义,避免被数据库解析为可执行的SQL命令。
  • 你先通过input_from_user.split('.').second提取了用户输入的特定部分,再用Quoted包装,进一步缩小了输入范围,降低了风险。
  • 最终生成的split_part函数调用中,所有动态参数都经过了安全处理,不会产生SQL注入漏洞。

无需新增字段的替代写法

除了当前的Arel写法,你还可以用ActiveRecord原生的参数化查询写法,代码更简洁且同样安全:

target_value = input_from_user.split('.').second
Model.where("split_part(?, '.', 2) = ?", target_value, 'random_value')

这里ActiveRecord会自动将占位符?替换为经过转义的安全值,和你当前的Arel写法安全性一致,可读性更高。

内容的提问来源于stack exchange,提问作者saviu-u

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 20:45:47