防止SQL注入

时间:2012-08-10 09:26:50

标签: c# asp.net sql sql-injection protection

是否有一个接受字符串作为参数并返回“已清理”字符串的函数,以便支持SQL注入保护?

6 个答案:

答案 0 :(得分:7)

您可以使用AddWithValue方法添加参数,如下所示:

SqlCommand cmd = new SqlCommand("Select * From Test Where TestID = @TestID");
cmd.Parameters.AddWithValue("@TestID", 5);

答案 1 :(得分:4)

答案 2 :(得分:2)

没有任何功能是完美的或万无一失的。您应该通过其他方式(即存储过程,SQL参数化等)来防止SQL注入。

虽然这个功能非常有效:)

string CleanString(string s)
{
    return string.Empty;
}

答案 3 :(得分:1)

我不认为存在足够聪明的函数来查找是否存在SQL注入的可能性。

但最好的办法是避免所有可能性。例如,使用类型安全的SQL参数进行数据访问。

请看一下:

答案 4 :(得分:1)

在安全堆栈交换中查看this question上的答案 - 最合适的路径可能是OWASP's ESAPI - 他们的企业安全API,它具有Java EE,.NET的功能,{ {3}},PHP,ColdFusion CFML,Python,JavaScript,Objective-C,Force com,Ruby,Swingset,C,C ++和Perl:

  

免费的开源Web应用程序安全控制库   使程序员更容易编写风险较低的应用程序。该   ESAPI库旨在使程序员更容易   将安全性改进现有应用程序。 ESAPI库也是   为新的发展奠定坚实的基础。允许   特定于语言的差异,所有OWASP ESAPI版本都具有相同的特征   基本设计:有一套安全控制接口。他们   定义例如传递给类型的参数类型   安全控制。每个都有一个参考实现   安全控制。逻辑不是组织特定的和逻辑的   不是特定于应用程序。一个例子:基于字符串的输入   验证。每个都有自己的实现   安全控制。这些中可能包含应用程序逻辑   可能由您的组织开发或为您的组织开发的类。一个   例如:企业认证。

并阅读此文档: ASP Classic

答案 5 :(得分:0)

我坚信使用参数来避免SQL注入。您可以编写存储过程或参数化查询以避免它。

除了SQL注入之外,参数还有许多好处,例如它可以处理日期和数字的许多问题......