sqlCommand.Parameters.Add(sqlParam)是否检查保留字,例如'Table','Drop'等。 基本上我想通过使用上面的方法来了解我们如何避免Sql Injection在那里的机制是什么。
答案 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注入的最佳方法。