.NET中的SQL注入预防我通常在.NET中编写我的SQLsql.Append("SELECTid,code,emailFROMmytableWHEREvariable=@variable");然后做这样的事情:myCommand.Parameters.AddWithValue("@variable",myVariableName");...但是当我获取的数据直接来自数据库时,我是否也应该执行addParameter?likesql.Append(string.Format("SELECTgroup_id,like_textFROMlikeTermsORDERBYgroup_idASC"));DataTabledtLike=SqlHelper.GetDataTable(likesql.ToString());foreach(DataRowdrindtLike){buildsql.Append("...varId="+dr["group_id"].ToString()+"...");...这是可以接受的吗?最佳实践是什么?您应该始终使用参数:不要相信数据库访问受限的人可以直接注入placeperformance使用的其他字段另外,它有助于提高性能。缓存的执行计划将忽略参数的值,这意味着每次参数更改时服务器都无需重新编译查询。当您将DbCommands与参数一起使用时,参数永远不会“内联”到查询中。相反,查询和参数数据被传递给特殊的系统存储过程sp_executesql。以这种方式完成后,无论您拥有什么参数数据,都将得到完全相同的处理,并且不会从查询字符串中解析出来;因此,可能已通过验证的注入命令永远不会执行。使用参数是基于ADO.NET的数据访问层的最佳实践,无论数据来自何处,IMO都是应该在此级别完成的唯一方法(如果您不使用ORM)。你永远不应该将从web或windows窗体中检索到的值连接到SQL语句中,如果你遵循该规则,为什么你会仅仅因为你确定或什至不确定信息不是直接来自用户而以不同的方式实现它?遵循相同的模式,如果您公开该方法以持久保存用户指定的数据,则它不会被烧毁。这是可以接受的(从某种意义上说,如果您知道限制,有时您可以正常工作)。使用数据库中的值并使用字符串连接来构建SQL查询是否是一种好习惯-不是。也就是说,如果您的示例“group_id”是“'--”怎么办?我建议使用存储过程,但这是可以接受的我还建议您在将参数分配给查询之前先清理参数以上是C#学习教程的全部内容:SQLinjectionpreventionin.需要了解更多C#学习教程,希望大家多加关注-本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
