我目前正在检查StackOverflow有关使用C#代码防止C#注入的最佳实践,许多答案包括.NET SQL类,如SqlCommand、SqlDataAdapter、.
问题是,我必须使用专用中间件组件将查询发送到数据库,而且在不使用SqlConnection的情况下无法找到使用这些类的任何方法。
下面是我的示例代码:
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:
SqlDataReader reader = sqlC.ExecuteReader();我得到了一个错误,因为我没有连接可以使用:
连接属性必须初始化
所以,我的问题是:
编辑:看来我误解了这些类的工作方式。
这些类不准备“脱机”的SQL语句,而设计为与SqlConnection一起使用。
但是我可以改变这个问题,从另一个角度来问它:有.NET类来准备针对注入?的“脱机”语句吗?
发布于 2020-06-04 14:07:10
SqlCommand被设计用于与SqlConnection一起专门查询middleware -它不是针对使用自己的连接方法的任何中间件或任意提供程序的“通用”SQL命令。您也不能使用它来一般性地“准备”文本SQL命令。
如果您的中间件想要与ADO.NET兼容,它应该提供它自己的命令/连接类型。如果它不兼容,那么您可能会遇到文本查询和串连字符串,并且需要找到其他方法来防止SQL注入(清除注释标记符、转义引号等)。
是否有.NET类来准备针对注入的“脱机”语句?
不是的。
https://stackoverflow.com/questions/62196533
复制相似问题