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

C#中该种不使用Parameter.Add()的SQL写法能否抵御SQL注入攻击?

结论

这段代码完全无法防范SQL注入攻击,存在极高的安全风险。

风险原因
  • 你通过字符串插值把用户可控的sNumber变量直接拼接进了SQL声明语句中,用于给@number变量赋值。只要sNumber包含构造好的SQL注入 payload(比如'; DROP TABLE [table];--),拼接后的完整SQL就会直接执行恶意代码,你声明的@number中间变量没有起到任何防护作用。
  • 本质上这套逻辑还是直接拼接SQL字符串,只是多了一层变量包装,没有改变用户输入直接进入SQL解析流程的核心问题。
无法使用Parameter.Add()的替代方案
  • 优先排查无法使用参数化方法的原因,所有.NET生态下的主流数据访问组件(包括原生ADO.NET、Dapper等)都支持参数化传参,这是防范SQL注入的最优方案,没有之一。
  • 确实只能用字符串拼接的场景下,执行两层校验兜底:
    1. 先做输入格式校验:如果sNumber有明确的业务格式规则(比如纯数字、固定长度的字母数字组合等),不符合格式的输入直接拦截,不进入后续SQL拼接逻辑。
    2. 对输入内容做SQL转义:SQL Server环境下需要把输入内容中的所有单引号'替换为两个单引号'',避免输入截断SQL语句结构。注意该方案存在边界case遗漏的可能,仅作为无参数化条件时的兜底手段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:15:04