Parameters.Add和Sql Injection

时间:2013-10-03 08:20:57

标签: sql-server sql-injection

sqlCommand.Parameters.Add(sqlParam)是否检查保留字,例如'Table','Drop'等。 基本上我想通过使用上面的方法来了解我们如何避免Sql Injection在那里的机制是什么。

2 个答案:

答案 0 :(得分:2)

这完全取决于您计划对正在执行的SQL中的参数执行的操作。使用.Parameters.Add()的好处是值是单独传递的,而不是1大块-o-sql的一部分。当然,由你来决定如何处理它们。

假设你做了这样的事情:

SELECT * FROM myTable WHERE customer_nr = @customer_nr

然后,如果'黑客'沿着';DROP TABLE myTable --的路线传递了一些内容并不重要。查询将不会返回任何内容,因为没有客户名为`'; DROP TABLE myTable - '

但是,如果你打算像这样使用它:

SELECT @sql = 'SELECT * FROM myTable WHERE customer_nr = ''' + @customer_nr + ''''
EXEC (@sql)

然后你打败了系统的目的,黑客将能够做一些SQL-Injection-ish的东西。

答案 1 :(得分:0)

不,它不会将参数视为保留字。使用参数化存储过程是避免sql注入的最佳方法。