Sql server 参数添加和Sql注入

Sql server 参数添加和Sql注入,sql-server,sql-injection,Sql Server,Sql Injection,sqlCommand.Parameters.Add(sqlParam)是否检查保留字,如“Table”、“Drop”等。 基本上,我想知道通过使用上面的方法,我们如何避免Sql注入,那里的机制是什么。不,它不将参数视为保留字。使用参数化存储过程是避免sql注入的最佳方法。这完全取决于您计划如何处理正在执行的sql中的参数。使用.Parameters.Add()的好处在于,这些值是单独传递的,而不是一个大chunk-o-sql的一部分。当然,到时候该由你决定怎么处理它们了 假设你这样做: SELE

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

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

这完全取决于您计划如何处理正在执行的sql中的参数。使用.Parameters.Add()的好处在于,这些值是单独传递的,而不是一个大chunk-o-sql的一部分。当然,到时候该由你决定怎么处理它们了

假设你这样做:

SELECT * FROM myTable WHERE customer_nr = @customer_nr
SELECT @sql = 'SELECT * FROM myTable WHERE customer_nr = ''' + @customer_nr + ''''
EXEC (@sql)
那么,一个“黑客”是否按照
”的思路传递了一些东西其实并不重要;删除表格myTable--
。查询不会返回任何内容,因为没有客户名为`;删除表myTable--'

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

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

那么你就破坏了系统的功能,黑客就可以做一些SQL注入之类的事情。

谢谢你的回复,请给我提供一个参考,说明占位符对阻止SQL注入没有帮助。。。我确信我能想出一个易受SQL注入攻击的参数化存储过程。:)你真的应该阅读相关文章,它解释得更好,并引用了许多其他相关信息。因此,这意味着.Parameters.Add()将避免sql注入,我们不想让Sps总是解决这个问题?Parameters.Add()确实会帮助你避免sql注入。无论您是直接在.CommandText中执行实际的SQL命令,还是通过存储过程执行实际的SQL命令,这在这一方面都无关紧要(尽管我更喜欢存储过程!)。简单地说,不要落入将参数转换回动态SQL的陷阱,无论是在.CommandText中还是在存储过程中,就像我上面所说的那样。