sswqycbailong 2020-07-28
/// <summary> /// 防XSS攻击 /// date:2020-07-28 /// </summary> public class XssFilter : ActionFilterAttribute { 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)"; public override void OnActionExecuting(ActionExecutingContext filterContext) { var request = filterContext.RequestContext.HttpContext.Request; if (request.HttpMethod == "GET") { for (int i = 0; i < request.QueryString.Count; i++) { var result = CheckData(request.QueryString[i].ToString()); if (result) { filterContext.Result = new JsonResult() { Data = new { ret = -1, msg = "提交的数据含有非法字符" }, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; break; } } } else { for (int i = 0; i < request.Form.Count; i++) { var result = CheckData(request.Form[i].ToString()); if (result) { filterContext.Result = new JsonResult() { Data = new { ret = -5, msg = "提交的数据含有非法字符" } }; break; } } } } private static bool CheckData(string inputData) { if (Regex.IsMatch(inputData, strRegex)) { return true; } else { return false; } } }