WEB开发网
开发学院数据库MSSQL Server 通用分页存储过程真的有注入漏洞吗? 阅读

通用分页存储过程真的有注入漏洞吗?

 2009-01-15 10:19:21 来源:WEB开发网   
核心提示: 查询方式,根据用户的姓来查询,通用分页存储过程真的有注入漏洞吗?(2),要想最终的存储过程执行语法正确,同时不存在注入漏洞, 此时条件的正确格式是:and first_name like '%Jim''s dog%',我们可以看到条件Jim's do

查询方式,根据用户的姓来查询。要想最终的存储过程执行语法正确,同时不存在注入漏洞, 此时条件的正确格式是:and first_name like '%Jim''s dog%'。

我们可以看到条件Jim's dog组装成SQL后,中间的单引号一定要变成两个。为了避免注入,我一般这样处理SQL拼接的安全问题:在C#写程序的时候应该这样写:

/// <summary>
    /// 屏蔽字符串中的特殊字符
    /// by minjiang 07-07-06
    /// </summary>
    public string SafeRequest(string str)
    {
      //定义要返回的字符串
      string sReturn;
      //将要处理的字符串转换为小写字母
      str = str.ToLower();
      //定义特殊字符串
      string SQL_KILL = "'|and|exec|insert|select|delete|update|count|*|%
|chr|mid|master|truncate|char|declare|set|;|from|=|--|drop|<|>";
      char[] separator ={ '|' };
      string[] sql = SQL_KILL.Split(separator);
      for(int i=0;i<sql .Length ;i++)
      {
        //如果有特殊字符则将它替换成为空
        if(str.IndexOf (sql [i].ToString ().ToLower ())>-1)
        {
          //把单引号替换成双引号
          if (sql[i].ToString() == "'")
          { str = str.Replace("'", "''"); }
          else
          {
            //把敏感字符替换成空
            str = str.Replace(sql[i].ToString().ToLower(), "");
          }
       
        }
     
      }
      sReturn = str;
      return sReturn;
   
    }
  
if(sUserName!="")
{
 strWhere +=" and first_name like'%"+this.SafeRequest(sUserName)+"%'"
}

Tags:通用 存储 过程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接