首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Server类(例如SqlCommand)来防止没有数据库连接的SQL注入?

如何使用Server类(例如SqlCommand)来防止没有数据库连接的SQL注入?
EN

Stack Overflow用户
提问于 2020-06-04 13:59:57
回答 1查看 125关注 0票数 0

我目前正在检查StackOverflow有关使用C#代码防止C#注入的最佳实践,许多答案包括.NET SQL类,如SqlCommandSqlDataAdapter、.

问题是,我必须使用专用中间件组件将查询发送到数据库,而且在不使用SqlConnection的情况下无法找到使用这些类的任何方法。

下面是我的示例代码:

代码语言:javascript
复制
SqlCommand sqlC = new SqlCommand("USP_MyProcedure");
sqlC.CommandType = System.Data.CommandType.StoredProcedure;
sqlC.Parameters.AddWithValue("@strRef", strRef);
sqlC.Parameters.AddWithValue("@strCmd", strCmd);
sqlC.Parameters.AddWithValue("@strParam", strParam);
sqlC.Parameters.AddWithValue("@strDef", strDef);
sqlC.Parameters.AddWithValue("@strWn", sWn);

SqlCommand似乎已正确初始化,SqlParameterCollection似乎没有问题,但属性SqlC.CommandText只返回"USP_MyProcedure“。

例如,如果我使用其他类来处理我的SqlCommand

代码语言:javascript
复制
SqlDataReader reader = sqlC.ExecuteReader();

我得到了一个错误,因为我没有连接可以使用:

连接属性必须初始化

所以,我的问题是:

  • 有使用这些.NET类(或其他类)的方法吗?为了准备我的SQL查询以防止SQL injections?
  • If不发生,是否还有其他.NET类来防止SQL注入,或者我必须实现自己的反SQL注入方法?从您的观点来看,基于哪种最佳实践?

编辑:看来我误解了这些类的工作方式。

这些类不准备“脱机”的SQL语句,而设计为与SqlConnection一起使用。

但是我可以改变这个问题,从另一个角度来问它:有.NET类来准备针对注入?的“脱机”语句吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-04 14:07:10

SqlCommand被设计用于与SqlConnection一起专门查询middleware -它不是针对使用自己的连接方法的任何中间件或任意提供程序的“通用”SQL命令。您也不能使用它来一般性地“准备”文本SQL命令。

如果您的中间件想要与ADO.NET兼容,它应该提供它自己的命令/连接类型。如果它不兼容,那么您可能会遇到文本查询和串连字符串,并且需要找到其他方法来防止SQL注入(清除注释标记符、转义引号等)。

是否有.NET类来准备针对注入的“脱机”语句?

不是的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62196533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档