public void Add(tour.Model.cate model)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("insert into tbl_cate(");
            strSql.Append("ciID,catename,refectoryname,refeaddress,refephone,catereason,hotrefectory,cateinfo,cateFID");
            strSql.Append(")");
            strSql.Append(" values (");
            strSql.Append("" + model.ciID + ",");
            strSql.Append("'" + model.catename + "',");
            strSql.Append("'" + model.refectoryname + "',");
            strSql.Append("'" + model.refeaddress + "',");
            strSql.Append("'" + model.refephone + "',");
            strSql.Append("'" + model.catereason + "',");
            strSql.Append("'" + model.hotrefectory + "',");
            strSql.Append("'" + model.cateinfo + "',");
            strSql.Append("" + model.cateFID + "");
            strSql.Append(")");
            DbHelperSQL.ExecuteSql(strSql.ToString());
        }
C# code
using System;
using System.Collections.Generic;
using System.Text;namespace tour.Model
{
    /// <summary>
    /// 实体类cate 。(属性说明自动提取数据库字段的描述信息)
    /// </summary>
    public class cate
    {
        public cate()
        { }
        #region Model
        private int _cateid;
        private int _ciid;
        private string _catename;
        private string _refectoryname;
        private string _refeaddress;
        private string _refephone;
        private string _catereason;
        private string _hotrefectory;
        private string _cateinfo;
        private int _catefid;
        private string _catefile;
        private DateTime _adddate;        /// <summary>
        /// 
        /// </summary>
        public int cateID
        {
            set{ _cateid=value;}
            get{return _cateid;}
        }
        /// <summary>
        /// 
        /// </summary>
        public int ciID
        {
            set{ _ciid=value;}
            get{return _ciid;}
        }
        /// <summary>
        /// 
        /// </summary>
        public string catename
        {
            set{ _catename=value;}
            get{return _catename;}
        }
        /// <summary>
        /// 
        /// </summary>
        public string refectoryname
        {
            set{ _refectoryname=value;}
            get{return _refectoryname;}
        }
        /// <summary>
        /// 
        /// </summary>
        public string refeaddress
        {
            set{ _refeaddress=value;}
            get{return _refeaddress;}
        }
        /// <summary>
        /// 
        /// </summary>
        public string refephone
        {
            set{ _refephone=value;}
            get{return _refephone;}
        }
        /// <summary>
        /// 
        /// </summary>
        public string catereason
        {
            set{ _catereason=value;}
            get{return _catereason;}
        }
        /// <summary>
        /// 
        /// </summary>
        public string hotrefectory
        {
            set{ _hotrefectory=value;}
            get{return _hotrefectory;}
        }
        /// <summary>
        /// 
        /// </summary>
        public string cateinfo
        {
            set{ _cateinfo=value;}
            get{return _cateinfo;}
        }
        /// <summary>
        /// 
        /// </summary>
        public int cateFID
        {
            set{ _catefid=value;}
            get{return _catefid;}
        }
        /// <summary>
        /// 
        /// </summary>
        public string catefile
        {
            set{ _catefile=value;}
            get{return _catefile;}
        }
        /// <summary>
        /// 
        /// </summary>
        public DateTime adddate
        {
            set{ _adddate=value;}
            get{return _adddate;}
        }
        #endregion Model
    }
}

解决方案 »

  1.   

    分层并不能防注入攻击最好是通过参数的方式进行防注入如:
    OracleParameter[] parms = {
    new OracleParameter(":ID", OracleType.VarChar, 40), }parms[0].Vlaue="";
      

  2.   

    可以建一规则层,过滤从客户端发过来的参数
    一般使用存储过程可以防sql注入。
    个人观点如有错误请大大们指出。
      

  3.   


    public void Add(tour.Model.cate model)
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append("insert into tbl_cate(");
                strSql.Append ("ciID,catename,refectoryname,refeaddress,refephone,catereason,hotrefectory,cateinfo,cateFID");
                strSql.Append(")");
                strSql.Append(" values (@ciID,@catename,@refectoryname,@refeaddress,@refephone,@catereason,@hotrefectory,@cateinfo,@cateFID)");
                //DbHelperSQL.ExecuteSql(strSql.ToString());
            }
    用参数
      

  4.   

    用传参数和加一些验证.例如用户名不能含"'" ,"="
    你给出的代码是肯定防止不了SQL注入的.
      

  5.   

     建议过滤用户输入  对' -- master 等直接过滤 
      

  6.   

    防止SQL注入还是要用Parameters来传值,分层跟SQL注入好像关系不那么密切;
      

  7.   

    你这个代码连基本的T-SQL都不合。            strSql.Append("'" + model.catename + "',");
    这个代码,如果catename属性值中含有单引号怎么办?这是一个连SQL语法都不懂的程序员写的SQL表达式。另外,既然封装为public void Add(tour.Model.cate model)这样一个独立的方法,那么它就肯定将来要多处使用,那么写这个方法的人按说就不应该用“现在catename中不可能有单引号呀”这样的借口。对于下面的几个字符串,也是一样,为什么不将单引号转换为两个单引号(这是T-SQL语法明文规定的)?而如果你写的SQL表达式确实是符合SQL语法的,管它什么“注入”,那不是杞人忧天嘛!
      

  8.   

    “过滤”什么呢?过滤单引号,--符号,select单词,等等?谁说model这个参数的属性中就不允许有这些字符呢?是跟用户签订协议了吗?当你写程序的时候你说“用户登录名中不允许含有=号”的时候,你仍然要区分这是你的个人的想象还是用户业务要求。如果你的技术可以做到录入某些符号,就不要硬往业务上找理由。
      

  9.   

      strSql.Append("'" + model.catename + "',");
    这个代码,如果catename属性值中含有单引号怎么办?这是一个连SQL语法都不懂的程序员写的SQL表达式。 
    为什么这样说?不合语法吗?