C#验证是否存在Sql注入代码
构造SQL的注入关键字符
//QueryString 数据检测GET恶意数据 private const string StrKeyWord = @".*(select|insert|delete|from|count(|drop table|update|truncate|asc(|mid(|char(|xp_cmdshell|exec master|netlocalgroup administrators|:|net user|""|or|and).*"; private const string StrRegex = @"[-|;|,|/|(|)|[|]|}|{|%|@|*|!|']"; /// <summary> /// 获取Post的数据 /// </summary> public static string ValidUrlPostData() { bool result = false; string res = string.Empty; for (int i = 0; i < HttpContext.Current.Request.Form.Count; i ) { result = ValidData(HttpContext.Current.Request.Form[i].ToString()); if (result) { res = "检测出POST恶意数据: 【" HttpContext.Current.Request.Form[i].ToString() "】 URL: 【" HttpContext.Current.Request.RawUrl "】来源: 【" HttpContext.Current.Request.UserHostAddress "】"; break; }//如果检测存在漏洞 } return res; } /// <summary> /// 获取QueryString中的数据 /// </summary> public static string ValidUrlGetData() { bool result = false; string res = string.Empty; for (int i = 0; i < HttpContext.Current.Request.QueryString.Count; i ) { result = ValidData(HttpContext.Current.Request.QueryString[i].ToString()); if (result) { res = "检测出GET恶意数据: 【" HttpContext.Current.Request.QueryString[i].ToString() "】 URL: 【" HttpContext.Current.Request.RawUrl "】来源: 【" HttpContext.Current.Request.UserHostAddress "】"; break; }//如果检测存在漏洞 } return res; } /// <summary> /// 验证是否存在注入代码 /// </summary> /// <param name="inputData"></param> public static bool ValidData(string inputData) { //里面定义恶意字符集合 //验证inputData是否包含恶意集合 if (Regex.IsMatch(inputData.ToLower(), GetRegexString())) { return true; } else { return false; } } /// <summary> /// 获取正则表达式 /// </summary> /// <param name="queryConditions"></param> /// <returns></returns> private static string GetRegexString() { //构造SQL的注入关键字符 string[] strBadChar = { "and" ,"exec" ,"insert" ,"select" ,"delete" ,"update" ,"count" ,"from" ,"drop" ,"asc" ,"char" ,"or" ,"%" ,";" ,":" ,"\'" ,"\"" ,"-" ,"chr" ,"mid" ,"master" ,"truncate" ,"char" ,"declare" ,"SiteName" ,"net user" ,"xp_cmdshell" ,"/add" ,"exec master.dbo.xp_cmdshell" ,"net localgroup administrators" }; //构造正则表达式 string str_Regex = ".*("; for (int i = 0; i < strBadChar.Length - 1; i ) { str_Regex = strBadChar[i] "|"; } str_Regex = strBadChar[strBadChar.Length - 1] ").*"; return str_Regex; }
原文链接:C#验证防止阻断Sql注入代码