我知道SQL注入是相当危险的。现在,在我的 C# 代码中,我使用以下命令编写参数化查询SqlCommand class:
SqlCommand command = ...;
command.CommandText = "SELECT * FROM Jobs WHERE JobId = @JobId;";
command.Parameters.Add("@JobId", SqlDbType.UniqueIdentifier ).Value = actualGuid;
command.ExecuteNonQuery();
这会自动使我的代码免受 SQL 注入的影响吗?我需要做一些额外的事情吗?
我想说,对于参数化查询的特定且可能规范的示例,是的,这已经足够了。
然而,人们有时会写这样的代码
cmd.CommandText = string.Format("SELECT * FROM {0} WHERE col = @col;", tableName);
cmd.Parameters.Add("@col", ...);
因为根本没有办法将表名本身作为参数传递,并且有时存在这样做的愿望 - 无论是否被误导。似乎经常被忽视的是,tableName(除非可能只从一组不从任何输入派生的静态/常量值中读取)确实允许 SQL 注入。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)