本人开发了一个留言本程序,现在上头要求我加入防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) 这里的泛型不对
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) 这里的泛型不对
解决方案 »
- 关于GridView绑定连接的格式问题
- 判断字符串是不是邮箱格式----无法识别的转义序列
- 为什么gridview GridView1_RowUpdating不能更新?
- Datagrid中模板列 更新问题
- 请教如何将单一静态html文件如index.htm映射到asp.net处理程序?
- 我大学毕业即将毕业,准备出去就业,想从事ASP.Net方面的开发,希望各位给我点建议
- 重写OnUnload方法,为何会在加载中调用该方法?
- 如何才能最快速地掌握ASP.NET?请各位大侠多多给建议!!!!
- 为什么生成XML标题字段不显示,急!求人帮助
- checkboxlist的问题
- Gridview取值问题
- 求助:未能加载类型FredCK.FCKeditorV2.FileBrowserConnector
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);
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;
}