public static bool processRequest(Microsoft.AspNetCore.Http.HttpRequest httpRequest, int delay = 500, int timeout = 15, int blackListCount = 30) { string requestIp = httpRequest.getIPAddress(); request request = null; var index = spamList.FindIndex(a => a.ip == requestIp && a.path == httpRequest.HttpContext.Request.Path.Value); if (index != -1) { request = spamList[index]; } else { request = new request(requestIp, httpRequest.HttpContext.Request.Path.Value); spamList.Add(request); } if (request.blacklist) { if ((DateTime.Now - request.lastRequestTime).Seconds < timeout) { request.lastRequestTime = DateTime.Now; // Console.WriteLine("TIMEOUT WILL EXPIRE IF YOU STOP 5 SECONDS"); return(true); } else { request.blacklist = false; request.blacklistedRequestsCount = 0; request.blackListedTime = DateTime.Now.AddHours(-24); return(false); } } if (!request.blacklist) { if ((DateTime.Now - request.lastRequestTime).Milliseconds < 100) { request.blacklistedRequestsCount += 5; } if ((DateTime.Now - request.lastRequestTime).Milliseconds < delay) { request.blacklistedRequestsCount += 1; } } Console.WriteLine(" DELTA LAST REQUEST time " + (DateTime.Now - request.lastRequestTime).Milliseconds); request.lastRequestTime = DateTime.Now; if (request.blacklistedRequestsCount > blackListCount) { request.blacklist = true; request.blacklistedRequestsCount = 0; request.blackListedTime = DateTime.Now; var siteUser = usersManager.users.Find(a => a.loginIP == requestIp); string possibleUser = "******"; if (siteUser != null) { notifyManager.sendNotify(siteUser, notifyManager.notifyType.warning, "You have been logged as possible attacker. Your requests were stored to investigate."); possibleUser = siteUser.username; } databaseManager.updateQuery($"INSERT INTO spamlist (ip, path,possibleUser) VALUES ('{requestIp}', '{request.path}', '{possibleUser}')").Execute( ); //CloudFlare.API.CFProxy.Modify.SetIPRestriction( requestIp, CloudFlare.API.Enums.IPRestrictionLevel.Ban ); return(true); } return(false); }