使用参数化 SqlCommand 是否可以使我的程序免受 SQL 注入的影响?

2023-12-02

我知道SQL注入是相当危险的。现在,在我的 C# 代码中,我使用以下命令编写参数化查询SqlCommand class:

SqlCommand command = ...;
command.CommandText = "SELECT * FROM Jobs WHERE JobId = @JobId;";
command.Parameters.Add("@JobId", SqlDbType.UniqueIdentifier ).Value = actualGuid;
command.ExecuteNonQuery();

这会自动使我的代码免受 SQL 注入的影响吗?我需要做一些额外的事情吗?


我想说,对于参数化查询的特定且可能规范的示例,是的,这已经足够了。

然而,人们有时会写这样的代码

cmd.CommandText = string.Format("SELECT * FROM {0} WHERE col = @col;", tableName);
cmd.Parameters.Add("@col", ...);

因为根本没有办法将表名本身作为参数传递,并且有时存在这样做的愿望 - 无论是否被误导。似乎经常被忽视的是,tableName(除非可能只从一组不从任何输入派生的静态/常量值中读取)确实允许 SQL 注入。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用参数化 SqlCommand 是否可以使我的程序免受 SQL 注入的影响? 的相关文章

随机推荐

  • 使用 scanf 读取带空格的字符串? [复制]

    这个问题在这里已经有答案了 我希望以下内容要求输入 然后接受一个字符串 带空格 然后再次执行 但在输入第一个字符串后它会重复输出 input char command 80 while 1 printf input scanf n comm
  • 基于其他文本列将数字列添加到 pandas 数据框[重复]

    这个问题在这里已经有答案了 我有这个数据框 df pd DataFrame 137 earn 158 earn 144 ship 111 trade 132 trade columns value topic print df value
  • 将 MFC 中的大型项目从 Visual C++ 6.0 迁移到 Visual Studio 2005

    我正在 Visual C 6 0 中维护一个大项目 250k loc 不包括从 idl 生成的代码 该项目使用 Visibroker 简称 VB 5 2 1 这是 Borland 的 CORBA 实现 最近 与我的项目通信的另一个模块升级到
  • 如何使用tabletop.js向传单地图添加标记?

    我正在使用这个非常好的指南将标记从 Google 工作表添加到基本的 leaflet js 地图 https rdrn me leaflet maps google sheets 问题是 在这里使用这些代码片段 我得到了控制台中记录和返回的
  • Powershell 如何知道在哪里可以找到要导入的模块?

    对于使用命令行开关和 powershell 的东西 我确实处于初学者水平 我使用 PowerShell API 从 C 调用 commandlet 我看到了奇怪的行为 在 stackoverfow 上的不同线程上 人们使用 Import C
  • SQL 查询返回笛卡尔积

    我有一些表 Employee id name id suc id dep id sec Suc id suc name Dep id dep id suc name Sec id sec id dep id suc name 不要责怪我 这
  • PHP 基础知识 - PHP 使用的 MySQL 密码存储在哪里

    我是网络开发新手 我正在学习 PHP 以便出售一些二进制文件 共享 Linux 主机 该网站尚未上线 我的php脚本 50 借用代码 50 自写 95 完全理解 登录MySQL来读取待售物品 并将销售交易数据写入另一个表中 Function
  • 如何检查服务器使用的 EL 版本

    我如何检查服务器使用的 EL 版本是什么 我正在运行 Websphere 7 EL 类位于 j2ee jar 中 清单如下 Manifest Version 1 0 Ant Version Apache Ant 1 6 5 Created
  • Java:将图像移向鼠标位置

    这是鲍勃 我已经知道如何让他rotate由于这个问题 朝向鼠标位置 https stackoverflow com posts 26607930 edit 我一切正常 但仍然无法做到move按下按键时他朝向鼠标位置 这是一个例子 impor
  • 可变长度霍夫曼码的比特流 - 如何写入文件?

    我正在用 C 语言开发霍夫曼编码 解码项目 并且很好地了解算法应如何存储有关霍夫曼树的信息 在解码期间重新构建树 以及使用可变长度代码解压缩到原始输入文件 当写入我的压缩文件时 我将输出一个包含唯一频率的 256 个 4 字节整数的表 并且
  • Linux下跨进程共享数据

    在我的应用程序中 我有一个进程分叉一个子进程 例如 child1 并且该子进程在磁盘上写入一个巨大的二进制文件并退出 然后 父进程派生出另一个子进程 child2 该子进程读取这个巨大的文件以进行进一步的处理 文件转储和重新加载使我的应用程
  • ObservableCollection 和 Item PropertyChanged

    我看过很多关于这个问题的讨论 但也许我只是一个新手 无法理解它 如果我有一个可观察的集合 它是 PersonNames 的集合 如 msdn 示例中所示 http msdn microsoft com en us library ms748
  • C 中的波形符运算符

    我见过 ELF 哈希算法中使用的波形符运算符 我很好奇它的作用 代码是来自永远的迷茫 unsigned elf hash void key int len unsigned char p key unsigned h 0 g int i f
  • Python 中对象的布尔值

    众所周知 Python 对对象有布尔值 如果一个类有一个 len 方法 它的每个实例 len 碰巧返回 0 将被评估为布尔值False 例如 空列表 事实上 每个可迭代的空自定义对象都被评估为False如果它出现在布尔表达式中 现在假设我有
  • 基于鼠标的Unity3d瞄准

    我正在制作炮弹射击游戏 这是一个简短的代码 我在其中计算瞄准方向 Vector3 mousePos Input mousePosition mousePos z thisTransform position z camTransform p
  • 为什么在调用 jnz 之前要将一个值与其自身进行“或”操作?

    我正在阅读一些执行以下操作的代码 OR al al JNZ loc 123456 如果我没读错的话 OR命令只是设置一个标志位 然后测试该寄存器是否有任何非零值 为什么要这样写而不是这样写 CMP al 0 JNE loc 123456 哪
  • 在 WooCommerce 中显示产品类别的随机产品缩略图

    我正在尝试提取随机产品缩略图以在我的页面之一上显示为图像 我似乎找不到有效的方法 并尝试了以下解决方案this and this post 在 div 中回显它也是有益的 这是我目前正在尝试的 但我仍然不确定如何做到这一点 函数 php f
  • 使用 C# 从 xml 文件获取值

    我对 xml 很陌生 我不知道如何从下面的 xml 文件中读取 获取值
  • 无法从 Android 设备在 Facebook 页面中看到类似选项

    I am trying to open a facebook page from my app in both android and ios In ios the page shows LIKE button but in android
  • 使用参数化 SqlCommand 是否可以使我的程序免受 SQL 注入的影响?

    我知道SQL注入是相当危险的 现在 在我的 C 代码中 我使用以下命令编写参数化查询SqlCommand class SqlCommand command command CommandText SELECT FROM Jobs WHERE