c# - 参数化查询如何帮助防止 SQL 注入(inject)?

标签 c# .net sql sql-server-2005 parameterized-query

在查询 1 和查询 2 中,文本框中的文本被插入到数据库中。这里的参数化查询有什么意义?

  1. txtTagNumber 作为查询参数传递

    SqlCommand cmd = new SqlCommand("INSERT INTO dbo.Cars " +"VALUES(@TagNbr);" , conn);
    cmd.Parameters.Add("@TagNbr", SqlDbType.Int);
    cmd.Parameters["@TagNbr"].Value = txtTagNumber.Text;
    
  2. 在构造查询之前将 txtTagNumber 转换为整数

    int tagnumber = txtTagNumber.Text.ToInt16(); /* EDITED */
    INSERT into Cars values(tagnumber.Text); /* then is it the same? */
    

另外,这里我会使用正则表达式验证来阻止非法字符的插入。

最佳答案

参数化查询会在运行 SQL 查询之前正确替换参数。它完全消除了“脏”输入改变查询含义的可能性。也就是说,如果输入包含 SQL,则它不能成为执行内容的一部分,因为 SQL 永远不会注入(inject)结果语句。

关于c# - 参数化查询如何帮助防止 SQL 注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5468425/

相关文章:

c# - EntityFramework 和处理重复的主键/并发/竞争条件情况

c# - 我可以声明一个 Type<T> 的变量而不在编译时指定 T 吗?

c# - Process.kill() 在 Windows 7 32 位中被拒绝,即使具有管理员权限

.net - 从 COM ProgID 加载 .NET 程序集而不创建 COM 对象

php - 解析/标记包含 SQL 命令的字符串

c# - 确定主机是否已解析 DNS 名称或 IP

c# - 游戏编程和事件处理程序

c# - 如何在 .NET 控制台应用程序中获取应用程序的路径?

sql - 在 SQL 2005 上使用 FOR XML PATH 时如何保留与号 (&)

mysql - 从 3 个表中选择具有相同列 id 的记录