我听说“每个人”都在使用参数化 SQL 查询来抵御 SQL 注入攻击,而不必验证每一个用户输入。
如何做到这一点? 当使用存储过程时,是否会自动得到这一点?
所以我的理解是,这是非参数化的:
cmdText = String.Format("SELECT foo FROM bar WHERE baz = '{0}'", fuz)
这是参数化的吗?
cmdText = String.Format("EXEC foo_from_baz '{0}'", fuz)
或者我需要做一些更广泛的像这样的事情,以保护自己免受 SQL 注入?
With command
.Parameters.Count = 1
.Parameters.Item(0).ParameterName = "@baz"
.Parameters.Item(0).Value = fuz
End With
除了安全考虑之外,使用参数化查询还有其他好处吗?
更新: 这篇伟大的文章链接在 Grotok 提到的一个问题中。 Http://www.sommarskog.se/dynamic_sql.html