0

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

4

2 回答 2

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 的东西。

于 2013-10-03T10:38:12.410 回答
0

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

于 2013-10-03T08:25:37.990 回答