是否有一个接受字符串作为参数并返回“已清理”字符串的函数,以便支持SQL注入保护?
答案 0 :(得分:7)
您可以使用AddWithValue方法添加参数,如下所示:
SqlCommand cmd = new SqlCommand("Select * From Test Where TestID = @TestID");
cmd.Parameters.AddWithValue("@TestID", 5);
答案 1 :(得分:4)
您需要使用参数LINQ to SQL或Entity Framework。
http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx
http://msdn.microsoft.com/en-us/data/ef.aspx
答案 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注入之外,参数还有许多好处,例如它可以处理日期和数字的许多问题......