1 using System; 2 using System.Linq; 3 using System.Text; 4 using System.Text.RegularExpressions; 5 using System.Web; 6 7 namespace HOST_CONTROL_CENTER.Uril.DBHelper 8 { 9 /// <summary> 10 /// 防sql注入关键词检测 11 /// sql关键词与xss攻击语句 12 /// 注:尽量使用参数化传值不要拼接sql 13 /// </summary> 14 public class SafeSqlHelper 15 { 16 private const string StrRegex = @"<[^>]+?style=[\w]+?:expression\(|\b(alert|confirm|prompt)\b|^\+/v(8|9)|<[^>]*?=[^>]*?&#[^>]*?>|\b(and|or)\b.{1,6}?(=|>|<|\bin\b|\blike\b)|/\*.+?\*/|<\s*script\b|<\s*img\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)"; 17 public static bool PostData() 18 { 19 bool result = false; 20 for (int i = 0; i < HttpContext.Current.Request.Form.Count; i++) 21 { 22 result = CheckData(HttpContext.Current.Request.Form[i].ToString()); 23 if (result) 24 { 25 break; 26 } 27 } 28 return result; 29 } 30 31 /// <summary> 32 /// 获取数据 33 /// </summary> 34 /// <returns></returns> 35 public static bool GetData() 36 { 37 bool result = false; 38 for (int i = 0; i < HttpContext.Current.Request.QueryString.Count; i++) 39 { 40 result = CheckData(HttpContext.Current.Request.QueryString[i].ToString()); 41 if (result) 42 { 43 break; 44 } 45 } 46 return result; 47 } 48 /// <summary> 49 /// Cookie数据 50 /// </summary> 51 /// <returns></returns> 52 public static bool CookieData() 53 { 54 bool result = false; 55 for (int i = 0; i < HttpContext.Current.Request.Cookies.Count; i++) 56 { 57 result = CheckData(HttpContext.Current.Request.Cookies[i].Value.ToLower()); 58 if (result) 59 { 60 break; 61 } 62 } 63 return result; 64 65 } 66 public static bool referer() 67 { 68 bool result = false; 69 return result = CheckData(HttpContext.Current.Request.UrlReferrer.ToString()); 70 } 71 72 /// <summary> 73 /// 检查数据 74 /// </summary> 75 /// <param name="inputData"></param> 76 /// <returns></returns> 77 public static bool CheckData(string inputData) 78 { 79 if (Regex.IsMatch(inputData, StrRegex)) 80 { 81 return true; 82 } 83 else 84 { 85 return false; 86 } 87 } 88 } 89 }
注:尽量使用参数化传值,减少sql拼接