我一直在阅读一些有关SQL注入的信息,我想确保我的代码可以说“安全”,我打算使用RegExp验证程序来检查用户输入,但是这里的另一篇文章建议仅使用参数化查询,我正在使用它们,但我想确保我的代码是安全的,对吗?
using ( SqlConnection dataConnection = new SqlConnection(myConnectionString) ) { using ( SqlCommand dataCommand = dataConnection.CreateCommand() ) { dataCommand.CommandText = "INSERT INTO Lines (Name, CreationTime) " + "VALUES (@LineName, @CurrentDateTime)"; dataCommand.Parameters.AddWithValue("@LineName", TextBox2.Text); dataCommand.Parameters.AddWithValue("@CurrentDateTime", DateTime.Now.ToString()); dataConnection.Open(); //do other DB stuff
我将最后一部分剪短,使文章更短,其余的只是尝试并捕获异常并关闭数据库连接,以及提供有关插入成功的用户反馈。
您的代码很好,可以防止注入,因为值是作为参数而不是字符串文字传递的。但是,如果您自己编写此类数据访问,是否考虑过创建SqlParameter对象并显式设置类型,大小等并将参数添加到命令中?AddWithValue可以正常工作,但是SQL Server将不得不确定类型,这需要一点点但不必要的开销。