我一直在阅读有关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
我砍掉最后一部分以缩短帖子,其余部分只是尝试捕捉异常并关闭数据库连接以及提供用户关于插入成功的反馈。
答案 0 :(得分:11)
您的代码很好,它可以防止注入,因为值是作为参数而不是字符串文字传递的。但是,如果您自己编写此类数据访问,是否考虑过创建SqlParameter个对象并明确设置类型,大小等,并将参数添加到命令中? AddWithValue可以正常工作,但SQL Server必须确定类型,但不必要的开销。
答案 1 :(得分:1)
好吧,你总是可以尝试在文本框中注入一个SQL语句,这可能会给你一个更快,更明确的答案。
答案 2 :(得分:1)
是的,这是相当安全的。只要你不使用预准备语句中的“已清理”变量来生成动态sql,你通常都可以。您正在使用预准备语句的事实将处理转义字符和其他简单的注入方法。
我不会放弃任何其他验证......