有关SQL注入的帮助

时间:2010-04-14 06:55:57

标签: asp.net sql sql-injection

请帮我阻止我的数据从SQL注入。 我在sql server上执行任何操作时都替换了'with''(带2引号的单引号)。 请告诉我我需要做什么,以防止我的应用程序从SQL注入。我的申请是在asp.net 2.0

我将使用参数化查询,但我的旧项目怎么样...我的意思是我写了一个字符串查询并将其作为命令文本发送到sql server。

请告诉我任何一个插入sql注入即使我已经替换'with''?

3 个答案:

答案 0 :(得分:9)

如果语言/框架支持参数化查询,您可以做的最好的事情就是使用参数化查询。

编辑:asp.net可以处理它。使用SqlCommand

来自here -

的示例
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);
        }
    }
}

答案 1 :(得分:1)

您应该使用库来访问SQL,而不是手动清理SQL。

不要手动构建查询字符串,如果需要传递参数,请使用参数化查询和存储过程。

请参阅VB.NET中的this示例。

答案 2 :(得分:1)

我不确定,但我认为没有任何快速简便的方法来保护您的旧项目免受SQL注入攻击。

我认为你最好的选择可能是修改旧项目中的数据访问代码以使用参数化查询。

或者,您可以像Oded建议并使用库重新编写旧项目一样。