本人开发了一个留言本程序,现在上头要求我加入防SQL注入代码,我不知道怎么写,特别指出要求写一个函数,然后调用它来实现防SQL注入功能。   下面这是我网上找的可以实现这个功能的函数,但有些错误,请改正。
    bool CheckParams(params object[] args)

        string[] Lawlesses={"=","'"};      //   Regex Regex = new Regex(@"^([0-9])$"); if(Lawlesses==null||Lawlesses.Length<=0)return true; //构造正则表达式,例:Lawlesses是=号和'号,则正则表达式为 .*[=}'].* (正则表达式相关内容请见MSDN) 另外,由于我是想做通用而且容易修改的函数,所以多了一步由字符数组到正则表达式,实际使用中,直接写正则表达式亦可; 
string str_Regex=".*["; 
for(int i=0;i< Lawlesses.Length-1;i++) 
str_Regex+=Lawlesses[i]+"|"; 
str_Regex+=Lawlesses[Lawlesses.Length-1]+"].*"; 
// foreach(object arg in args) 
{ if(arg is string)//如果是字符串,直接检查 
{ if(Regex.Matches(arg.ToString(),str_Regex).Count>0) 
return false; } 
else if(arg is ICollection)//如果是一个集合,则检查集合内元素是否字符串,是字符串,就进行检查 { foreach(object obj in (ICollection)arg) 
{ if(obj is string) 
{ if(Regex.Matches(obj.ToString(),str_Regex).Count>0) 
return false; 



        return true;
} 这段代码主要几如下几个错误:1\不存在 Regex 
2、else if(arg is ICollection)   obj in (ICollection)arg)   这里的泛型不对

解决方案 »

  1.   

    建议楼主别用拼字符串的方式生成sql语句,用sqlparameter类string strOrderID = this.textBox1.Text.Trim().ToString();  
               string strCustomerID = this.textBox2.Text.Trim().ToString();  
               //被SQL注入的拼SQL的句子是这么写的  
               //string strSql = "Select * from [Orders] Where OrderId = '" + strOrderID + "' AND CustomerID = '" + strCustomerID + "'";  
               //防止SQL注入的拼SQL的句子是这么写的  
               string strSql = "Select * from [Orders] Where OrderId = @strOrderID  AND CustomerID = @strCustomerID";  
               //加sqlParameter变量  
               SqlCommand myCommand = new SqlCommand(strSql, con);  
               SqlParameter prOrderId = new SqlParameter("@strOrderID", SqlDbType.VarChar, 64);  
               prOrderId.Value = strOrderID;  
               myCommand.Parameters.Add(prOrderId);  
               //加sqlParameter变量  
               SqlParameter prCustomerID = new SqlParameter("@strCustomerID", SqlDbType.VarChar, 64);  
               prCustomerID.Value = strCustomerID;  
               myCommand.Parameters.Add(prCustomerID);  
      

  2.   

    C# 中SqlParameter类的使用方法小结
      

  3.   


    public static string SqlFilter( string contents )
            {
                if (!string.IsNullOrEmpty(contents))
                {
                    contents = Regex.Replace(contents, " exec | insert | select | delete | update | master | truncate | declare ", "", RegexOptions.IgnoreCase);
                    contents = contents.Replace("'", "''");
                }
                return contents;
            }