【发布时间】:2010-10-07 06:00:09
【问题描述】:
我听说“每个人”都在使用参数化 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
【问题讨论】:
-
令我震惊的是,以前在 Stackoverflow 上从未有人问过这个问题。非常好!
-
哦,它有。当然,措辞非常不同,但确实如此。
-
您应该使用参数化查询来防止Little Bobby Tables 破坏您的数据。忍不住:)
-
With 块有什么不好?
-
有人对“With 块有什么不好”的问题有疑问吗?
标签: sql vb.net sql-parametrized-query