微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用参数化的SqlCommand是否会使我的程序不受SQL注入的影响?

如何解决使用参数化的SqlCommand是否会使我的程序不受SQL注入的影响?

我想为您的参数化查询示例提供特定的,也许是规范的示例,是的,这足够了。

但是,人们有时会这样写代码

cmd.CommandText = string.Format("SELECT * FROM {0} WHERE col = @col;", tableName);
cmd.Parameters.Add("@col", ...);

因为根本没有办法将表名本身作为参数传递,并且有时存在执行的愿望- 是否被误导了。似乎然后常常被忽略了,tableName(除非只能从不是从任何输入派生的一组静态/常量值中读取)确实允许sql注入。

解决方法

我知道SQL注入是相当危险的。现在在我的C#代码中,我使用SqlCommandclass组成了参数化查询:

SqlCommand command = ...;
command.CommandText = "SELECT * FROM Jobs WHERE JobId = @JobId;";
command.Parameters.Add("@JobId",SqlDbType.UniqueIdentifier ).Value = actualGuid;
command.ExecuteNonQuery();

这会自动使我的代码不受SQL注入的影响吗?我需要做些额外的事情吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。