.NET,Java和其他各种语言的高级数据库API通常提供称为预处理语句和参数绑定的技术,而不是将纯文本命令发送到数据库服务器.我想知道的是当你执行这样的语句时会发生什么:
SqlCommand cmd = new SqlCommand("GetMemberByID"); cmd.CommandType = CommandType.StoredProcedure; SqlParameter param = new SqlParameter("@ID", memberID); para.DbType = DbType.Integer; cmd.Parameters.Add(param);
我知道这是一种最佳做法.SQL注入攻击以这种方式最小化.但是当你执行这些语句时,究竟发生了什么呢?最终结果仍然是SQL安全字符串吗?如果没有,最终结果是什么?这足以防止SQL注入攻击吗?
有关预准备语句的MySQL手册页提供了大量信息(应该适用于任何其他RDBMS).
基本上,您的语句会提前解析和处理,并且参数将单独发送,而不是与SQL代码一起处理.这消除了SQL注入攻击,因为在参数设置之前解析了SQL.