如何创建参数化SQL查询?我为什么要?

如何创建参数化SQL查询?我为什么要?

我听说“每个人”都在使用参数化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 = fuzEnd With

除安全考虑因素外,使用参数化查询还有其他优点吗?

更新:这篇伟大的文章与Grotok引用的一个问题相关联。http://www.sommarskog.se/dynamic_sql.html


胡说叔叔
浏览 918回答 4
4回答

万千封印

绝对是最后一个,即或者我是否需要做更广泛的......?(是cmd.Parameters.Add())参数化查询有两个主要优点:安全性:这是避免SQL注入漏洞的好方法性能:如果您经常使用不同的参数调用相同的查询,则参数化查询可能允许数据库缓存您的查询,这是性能增益的重要来源。额外:您不必担心数据库代码中的日期和时间格式问题。同样,如果您的代码将在具有非英语语言环境的计算机上运行,则不会出现小数点/小数点逗号的问题。
打开App,查看更多内容
随时随地看视频慕课网APP