【问题标题】:SQL Server parameterized SQL query - do I still need to escape quotes? [duplicate]SQL Server 参数化 SQL 查询 - 我还需要转义引号吗? [复制]
【发布时间】:2018-07-24 14:55:54
【问题描述】:

假设我有以下代码(删除无用的东西,如连接字符串、数据集创建、设置命令类型等)。

string sql = "SELECT * FROM SomeTable WHERE Field=@ParamValue";

using (SqlConnection conn = new SqlConnection())
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
    cmd.Parameters.Add(new SqlParameter("ParamValue", someValue));
    da.Fill(ds);
}

这种参数化查询的使用是否足以确保防止 SQL 注入的安全性,还是我需要先从 someValue 中去除引号,然后再将其作为参数传递?

【问题讨论】:

  • 不,您不需要转义引号。

标签: c# sql sql-server security sql-injection


【解决方案1】:

不,您不需要转义引号。当您使用 SQLParameters 执行 SQLCommand 时,参数永远不会直接插入到语句中。

相反,调用名为 sp_executesql 的系统存储过程并给出 SQL 字符串和参数数组(TDS 协议)。

参数被隔离并被视为数据。这可以缓解 SQL 注入问题并提供其他好处,例如强类型化和提高性能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多