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

参数化查询中使用string_split()是否存在SQL注入风险?

结论

你这个写法100%可以防SQL注入,没有安全隐患。

原理说明

SQL注入能生效的核心逻辑只有一个:用户输入的内容被拼接进了SQL语句文本,被数据库当成代码语法的一部分解析执行了。

  • 你这里的@commaSeparatedListOfValues是通过参数化方式传入的,从传给数据库开始,它就始终是一个纯字符串值,数据库从来不会把它的内容当成SQL命令解析。
  • string_split()本身是纯字符串处理函数,输入是字符串值,输出也是拆分后的字符串表值,整个处理过程不会重新解析、执行任何SQL逻辑。

你举的那个恶意输入样例:

"firstValue , ');PRINT 'Hello'-- , thirdValue"

经过string_split()拆分加TRIM()处理后,只会得到三个普通的字符串值:

  • firstValue
  • ');PRINT 'Hello'--
  • thirdValue

这些值只会被拿来和SomeColumn做等值匹配,不会被当成SQL指令执行,最多就是匹配不到对应数据返回空结果而已,不会触发任何恶意操作。

唯一需要避开的坑

只有一种情况会出风险:如果你后续把拆分出来的值直接拼接到动态SQL语句里执行,比如写类似下面的代码:

DECLARE @sql NVARCHAR(MAX)
SET @sql = 'SELECT * FROM SomeTable WHERE SomeColumn IN (' + @splitValue + ')'
EXEC(@sql)

这种把值直接拼进SQL文本的写法才会给注入留可乘之机,但你现在写的静态查询里直接用子查询做IN匹配的写法,完全不存在这个问题。

另外你用TRIM()处理拆分后的值是很实用的细节,能避免用户输入逗号前后带空格导致匹配失效的问题。

内容的提问来源于stack exchange,提问作者roboblocky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:09:10