除了调用存储过程,还有什么方法可以防止sql注入呢?程序里面如果有一两个地方没有用到存储过程,而是一直在类里面写sql语句,这样对程序的影响是不是很大呢?
  各位大侠们,可以系统一点的说明吗?

解决方案 »

  1.   


    public static bool AddNewProductImage(string sProductID, ArrayList alImages)
            {
                Util.DynamicQueryBuilder q = new Util.DynamicQueryBuilder();
                q.AddQueryLine("INSERT INTO productimage (productid, imagefile, whratio) SELECT ");
                bool fClause = false;
                for (int i = 0; i < alImages.Count; i++)
                {
                    Class.ProductImage image = (Class.ProductImage)alImages[i];
                    if (fClause)
                    {
                        q.AddQueryLine(" UNION ALL SELECT ");
                    }
                    Util.BuildInsertParameters(q, sProductID, false, false);
                    Util.BuildInsertParameters(q, image.sImageFile, true, true);
                    Util.BuildInsertParameters(q, image.sWhratio, false, true);                fClause = true;
                }            DataConnection conn = new DataConnection();
                return conn.ExecuteNonQuery(q.GetQueryText, q.GetParameters);
            }
      如果这样做的话,会有什么后果呢?可以防止sql注入吗?
      

  2.   

    传参数的形式,SQL语句也可以传参数的
      

  3.   


    好像.net运行时会自动把单引号替换掉
      

  4.   

    Parameters
    一般都考虑用这个,
    虽然不能100%,但是效果还不错.
      

  5.   

    除了参数化sql外,还有些什么方法可以防止sql注入了?比如会在网站上插入<script></script>之类的,这种要怎么防止呢?
      

  6.   

    改成参数化传递sqltype.varchar
      

  7.   

    javascript没用的,那个只是客户端运行,完全可以绕过。主要还是在server我这里有很多asp老的程序,
    1、判断属性,如果是从?a=xxx直接进来,就判断xxx是不是整数,或者判断xxx的字符长度,超过就截取Left2、过滤非法字符(% 括弧等)Replace3、再严格点,就是过滤(drop, delete, select, exec等保留字节)
      

  8.   


    存储过程并不一定能防止SQL注入,有些存储过程中用exec(SQL语句)这类写法,就没办法防止啦,
    主要一点是把数据参数化。,没办法参数化的用过滤,
      

  9.   


    public static bool AddNewUser(Model.Admin ad)
            {
                SqlParameter[] parm = new SqlParameter[]
                {
                    new SqlParameter(PARM_SUSERNAME,SqlDbType.VarChar,20),
                    new SqlParameter(PARM_SPASSWORD,SqlDbType.VarChar,20),
                    new SqlParameter(PARM_SREGDATE,SqlDbType.DateTime)
                };            parm[0].Value = ad.Username;
                parm[1].Value = ad.Password;
                parm[2].Value = ad.Regdate;
                Object i = SqlHelper.ExecuteScalar(SqlHelper.ConnectionStringLocalTransaction,
                    CommandType.StoredProcedure, PROC_ADDNEWUSER, parm);
                if (i != null)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
    如果是使用这种数据参数化,那么可以防止sql注入了吗?
      

  10.   

    参数化 
    或者滤掉 <> '' 等敏感字符
      

  11.   

    AJAX里有这些drop, delete, select, exec
      

  12.   

       我在网站上面搜索了一下,Global.asax过滤了一下像insert这样的关键字,
    但是还是被注入了  js注入
      真不知道要怎么解决了?   各位大侠,谁能够提供一下 这到底要怎么解决呀?