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

SQL Server使用方括号作为标识符分隔符是否可避免SQL注入?

方括号[]作为SQL标识符分隔符无法完全避免SQL注入风险

直接拼接用户输入到带[]包裹的SQL模板中,依然存在SQL注入风险,不能依赖这种方式做注入防护。

多数支持[]作为标识符分隔符的数据库(比如SQL Server),对[]内部的内容解析规则是:仅当遇到单独的]时,才会判定标识符定义结束,其余特殊字符都会被当作标识符的普通组成部分。你之前的测试注入没有生效,是因为测试输入中没有包含]字符,没有打破[]的包裹结构。

如果用户提交的输入内容为 test]; DROP DATABASE master; --,拼接后的SQL语句会变成:

create database [test]; DROP DATABASE master; --]

这段SQL中,用户输入里的]会提前闭合前面的[,后续的恶意语句会被当作独立SQL执行,末尾的]会被注释符--忽略,注入攻击可以成功执行。

正确的SQL注入防护方案:

  • 永远不要直接拼接用户输入生成SQL语句,优先使用数据库驱动提供的参数化查询接口,这是防范SQL注入的最优方案。
  • 如果是库名、表名这类无法直接参数化的标识符场景,要使用对应数据库官方提供的标识符转义函数处理用户输入,不要手动拼接[]。
  • 如果必须手动处理包裹逻辑,除了外层加[],还要把用户输入中所有的]替换为]](连续两个]在[]内部会被转义为单个普通]字符),但这种手动转义方案存在遗漏边界场景的风险,防护优先级远低于前两种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:15:02