關於怎麼防止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的責任了~~

       


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章