使用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
相关产品推荐
相关产品推荐

