Example #1
0
        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);
        }