我听说"每个人"都在使用参数化SQL查询来防止SQL注入攻击,而不必为每一条用户输入进行操作.
你怎么做到这一点?使用存储过程时是否自动获得此信息?
所以我理解这是非参数化的:
cmdText = String.Format("SELECT foo FROM bar WHERE baz = '{0}'", fuz)
Run Code Online (Sandbox Code Playgroud)
这会参数化吗?
cmdText = String.Format("EXEC foo_from_baz '{0}'", fuz)
Run Code Online (Sandbox Code Playgroud)
或者我是否需要做更广泛的事情以保护自己免受SQL注入?
With command
.Parameters.Count = 1
.Parameters.Item(0).ParameterName = "@baz"
.Parameters.Item(0).Value = fuz
End With
Run Code Online (Sandbox Code Playgroud)
除安全考虑因素外,使用参数化查询还有其他优点吗?
更新:这篇伟大的文章与格罗托克的一个问题相关联. http://www.sommarskog.se/dynamic_sql.html
我是C#开发人员.我非常喜欢花括号,因为我来自C,C++和Java背景.但是,我也喜欢.NET系列的其他编程语言,比如VB.NET.如果你在.NET中编程了一段时间,那么在C#和VB.NET之间来回切换并不是什么大不了的事.这是我工作的公司非常常见的方法.作为C#的人,我非常喜欢withVB.NET编译器提供的XML文字和关键字.我希望微软也将这些功能包含在C#中.
我只是很好奇,其他开发者对它有什么看法!