sqlCommand.Parameters.Add(sqlParam) 是否检查保留字,例如“Table”、“Drop”等。基本上我想通过上面的使用来了解我们如何避免 Sql Injection 那里的机制是什么。
问问题
128 次
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 回答