C# 如何在字符串命令文本中限制SQL注入

C# 如何在字符串命令文本中限制SQL注入,c#,sql-injection,C#,Sql Injection,如何使用SQL注入限制以下命令文本: cmdExcel.CommandText = "SELECT * From [" + sheetName + "]"; 任何帮助都将不胜感激。谢谢 既然您知道您不需要表名,那么您就知道我不应该包含任何空格 因此,如果您确保了这一点,那么即使有人试图添加更多sql,这也只会是一个错误 这就是你可以做到的 cmdExcel.CommandText = "SELECT * From [" + sheetName.Replace(" ", "") + "]";

如何使用SQL注入限制以下命令文本:

cmdExcel.CommandText = "SELECT * From [" + sheetName + "]";

任何帮助都将不胜感激。谢谢

既然您知道您不需要表名,那么您就知道我不应该包含任何空格

因此,如果您确保了这一点,那么即使有人试图添加更多sql,这也只会是一个错误

这就是你可以做到的

cmdExcel.CommandText = "SELECT * From [" + sheetName.Replace(" ", "") + "]";
使用ToSqlStrValue(“”)来保护SQL注入

例如:

str sql=“从username=“+ToSqlStrValue(username)”的客户中选择*

//
///这是为了防止由于SQL组装而导致潜在的SQL蠕虫。
/// 
/// 
/// 
公共静态字符串筛选器ValidSqlChars(字符串str)
{
如果(str==null | | str==“”)
返回str;
字符串[]badChars={“\'”};
str=str.Replace(badChars[0],“\'\'”);
返回str;
}
/// 
///此函数将“'”添加到字符串值的开头和结尾,以便
///可以通过+操作直接在SQL语句中使用。它还过滤
///无效的SQL字符,例如“没问题”到-->“‘没问题’”
///注意:所有字符串都是unicode字符串。如果strValue为null,则返回字符串“null”。
/// 
公共静态字符串ToSqlStrValue(字符串strValue)
{
if(strValue==null)
返回“null”;
其他的
返回“N\”+FilterInvalidSqlChars(strValue)+“N\”;
}

我猜cmdExcel是SqlCommand的类型。它允许我们添加参数

见下面的示例:

string commandText = "UPDATE Sales.Store SET Demographics = @demographics "
        + "WHERE CustomerID = @ID;";

    SqlConnection connection = new SqlConnection(connectionString)
        SqlCommand command = new SqlCommand(commandText, connection);
        command.Parameters.Add("@ID", SqlDbType.Int);
        command.Parameters["@ID"].Value = customerID;


        command.Parameters.AddWithValue("@demographics", demoXml);

使用参数而不是构建自己的字符串。不能对表名使用查询参数。一个更好的带答案的重复问题是:“表名可以包含任何有效字符(例如空格)。”您不能像OP的示例中那样对表名使用查询参数。OP要求的不是这个。他们试图保护的是表名,而不是字符串。
string commandText = "UPDATE Sales.Store SET Demographics = @demographics "
        + "WHERE CustomerID = @ID;";

    SqlConnection connection = new SqlConnection(connectionString)
        SqlCommand command = new SqlCommand(commandText, connection);
        command.Parameters.Add("@ID", SqlDbType.Int);
        command.Parameters["@ID"].Value = customerID;


        command.Parameters.AddWithValue("@demographics", demoXml);