关于怎么防止SQL注入

 有一天偶开了个帖子,关于怎么防sql注入 ,最后很感谢各位朋友的鼎力相助,我总结如下!

1、大家都很推荐的参数化!具体我以更新一条数据为例,包括用存储过程啥的都是这个意思!!

   

                /// <summary>
		/// 更新一条数据
		/// </summary>
		public bool Update(Ost.Model.P_Product model)
		{
			StringBuilder strSql=new StringBuilder();
			strSql.Append("update P_Product set ");
			strSql.Append("CategoryId=@CategoryId,");
			strSql.Append("BrandId=@BrandId,");
			strSql.Append("Name=@Name,");
			strSql.Append("Descn=@Descn,");
			strSql.Append("Image=@Image,");
			strSql.Append("ImageSmall=@ImageSmall,");
			strSql.Append("Price=@Price,");
			strSql.Append("VipPrice=@VipPrice,");
			strSql.Append("Cheapness=@Cheapness");
			strSql.Append(" where ID=@ID");
			SqlParameter[] parameters = {
					new SqlParameter("@CategoryId", SqlDbType.VarChar,20),
					new SqlParameter("@BrandId", SqlDbType.VarChar,20),
					new SqlParameter("@Name", SqlDbType.VarChar,80),
					new SqlParameter("@Descn", SqlDbType.Text),
					new SqlParameter("@Image", SqlDbType.VarChar,80),
					new SqlParameter("@ImageSmall", SqlDbType.VarChar,80),
					new SqlParameter("@Price", SqlDbType.Decimal,9),
					new SqlParameter("@VipPrice", SqlDbType.Decimal,9),
					new SqlParameter("@Cheapness", SqlDbType.Int,4),
					new SqlParameter("@ID", SqlDbType.Int,4),
					new SqlParameter("@ProductId", SqlDbType.VarChar,20)};
			parameters[0].Value = model.CategoryId;
			parameters[1].Value = model.BrandId;
			parameters[2].Value = model.Name;
			parameters[3].Value = model.Descn;
			parameters[4].Value = model.Image;
			parameters[5].Value = model.ImageSmall;
			parameters[6].Value = model.Price;
			parameters[7].Value = model.VipPrice;
			parameters[8].Value = model.Cheapness;
			parameters[9].Value = model.ID;
			parameters[10].Value = model.ProductId;

			int rows=DbHelperSQL.ExecuteSql(strSql.ToString(),parameters);
			if (rows > 0)
			{
				return true;
			}
			else
			{
				return false;
			}
		}

2、过滤字符!

     我觉的这个也很重要,一些关键字直接给他过滤掉,比如drop 、datebase、delete,and  等一些关键字,写个方法直接过滤掉~!

    把单引号替换成两个单引号!数值型要强制转换!!!

3、利用Entity Framwork ,LINQ  2者配合也能有效防注!

4、关闭服务器返回提示错误。有些人是会根据你的提示错误判断你的表名,数据库名的,服务器返回提示关掉就可以避免这些问题了!

5、也有人说买防火墙!!! 这就不是coder的责任了~~

       


你可能感兴趣的:(关于怎么防止SQL注入)