有什么好的方法可以防止SQL注入

问题描述

通过使用SqlCommand及其子参数集,您无需承担所有检查sql注入的麻烦,这些麻烦将由这些类处理。

这是一个示例,摘自以上文章之一:

private static void UpdateDemographics(Int32 customerID,
    string demoXml, string connectionString)
{
    // Update the demographics for a store, which is stored  
    // in an xml column.  
    string commandText = "UPDATE Sales.Store SET Demographics = @demographics "
        + "WHERE CustomerID = @ID;";

    using (sqlConnection connection = new sqlConnection(connectionString))
    {
        sqlCommand command = new sqlCommand(commandText, connection);
        command.Parameters.Add("@ID", sqlDbType.Int);
        command.Parameters["@ID"].Value = customerID;

        // Use AddWithValue to assign Demographics. 
        // sql Server will implicitly convert strings into XML.
        command.Parameters.AddWithValue("@demographics", demoXml);

        try
        {
            connection.open();
            Int32 rowsAffected = command.ExecuteNonQuery();
            Console.WriteLine("RowsAffected: {0}", rowsAffected);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

解决方法

这个问题已经在这里有了答案

如何将用户提供的输入添加到SQL语句? (2个答案)

4年前关闭。

我必须为我的OJT公司编程一个应用程序管理系统。前端将在C#中完成,后端将在SQL中完成。

现在,我从来没有做过这样的项目。在学校里,我们只有关于SQL的基本课程。不知何故,我们的老师完全没有讨论SQL注入,而我直到现在才通过网络阅读与之联系。

所以无论如何,我的问题是:如何防止C#中的SQL注入?我隐约地认为可以通过适当地屏蔽应用程序的文本字段来做到这一点,以便它仅接受指定格式的输入。例如:电子邮件文本框的格式应为“
example@examplecompany.tld”。这种方法是否足够?还是.NET具有可处理此类内容的预定义方法?我可以将过滤器应用于文本框,使其仅接受电子邮件地址格式或名称文本框,使其不接受特殊字符吗?