是否有一个函数接受一个字符串作为参数并返回一个“清理过的”字符串,以支持防止 SQL 注入?
6 回答
您可以使用 AddWithValue 方法添加参数,如下所示:
SqlCommand cmd = new SqlCommand("Select * From Test Where TestID = @TestID");
cmd.Parameters.AddWithValue("@TestID", 5);
您需要使用参数、LINQ to SQL或实体框架。
LINQ 到 SQL
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
SQL 参数
没有任何功能是完美的或万无一失的。您应该真正致力于通过其他方式(即存储过程、SQL 参数化等)防止 SQL 注入。
虽然这个功能相当有效:)
string CleanString(string s)
{
return string.Empty;
}
我认为不存在一个足够聪明的函数来判断是否存在 SQL 注入的可能性。
但最好的办法是避免所有的可能性。例如,使用类型安全的 SQL 参数进行数据访问。
请看一看:
在 Security Stack Exchange 上查看这个问题的答案- 最适合您的路径可能是OWASP 的 ESAPI - 他们的 Enterprise Security API,它具有 Java EE、.NET、ASP Classic、PHP、ColdFusion CFML、Python 的功能, JavaScript、Objective-C、Force com、Ruby、Swingset、C、C++ 和 Perl 是:
一个免费的、开源的、Web 应用程序安全控制库,使程序员更容易编写低风险的应用程序。ESAPI 库旨在使程序员更容易将安全性改进到现有应用程序中。ESAPI 库也为新开发奠定了坚实的基础。考虑到特定语言的差异,所有 OWASP ESAPI 版本都具有相同的基本设计:有一组安全控制接口。例如,它们定义了传递给安全控制类型的参数类型。每个安全控制都有一个参考实现。逻辑不是特定于组织的,逻辑也不是特定于应用程序的。一个例子:基于字符串的输入验证。每个安全控制都有可选的您自己的实现。这些类中可能包含由您的组织开发或为您的组织开发的应用程序逻辑。一个例子:企业认证。
并阅读此文档:SQL 注入预防备忘单
我坚信使用参数来避免 SQL 注入。您可以编写存储过程或参数化查询来避免它。
除了 SQL 注入之外,参数还有很多好处,比如它可以处理很多日期和数字的问题......