/// <summary> /// Неудачная авторизация /// </summary> /// <param name="Settings"></param> /// <param name="memoryCache"></param> /// <param name="RemoteIpAddress">IP адрес пользователя</param> /// <param name="typeBlockIP">Блокировка IP в 'Брандмауэр' глобально или только для домена</param> /// <param name="host"></param> public static void FailAuthorization(string RemoteIpAddress, TypeBlockIP typeBlockIP, string host = null) { var memoryCache = Service.Get <IMemoryCache>(); string key = KeyToMemoryCache.LimitLogin(RemoteIpAddress); if (memoryCache.TryGetValue(key, out List <DateTime> TimeArray)) { // Актуальные записи var array = (from time in TimeArray where (DateTime.Now - time).TotalMinutes < 10 select time).ToList(); // База JsonDB var jsonDB = Service.Get <JsonDB>(); // Блокировка IP if ((array.Count + 1) >= jsonDB.Security.CountAccess) { // Где именно блокировать IP string keyIPtables = typeBlockIP == TypeBlockIP.domain ? KeyToMemoryCache.IPtables(RemoteIpAddress, host) : KeyToMemoryCache.IPtables(RemoteIpAddress); // Записываем IP в кеш IPtables memoryCache.Set(keyIPtables, new IPtables("Перебор паролей", DateTime.Now.AddMinutes(jsonDB.Security.BlockingTime)), TimeSpan.FromMinutes(jsonDB.Security.BlockingTime)); // Удаляем ключ LimitLogin memoryCache.Remove(key); // Дублируем информацию в SQL WriteLogTo.SQL(new BlockedIP() { IP = RemoteIpAddress, BlockingTime = DateTime.Now.AddMinutes(jsonDB.Security.BlockingTime), Description = "Перебор паролей", typeBlockIP = typeBlockIP, BlockedHost = host }); return; } // Обновление записей array.Add(DateTime.Now); memoryCache.Set(key, array, TimeSpan.FromMinutes(10)); } else { memoryCache.Set(key, new List <DateTime>() { DateTime.Now }, TimeSpan.FromMinutes(10)); } }
/// <summary> /// Успешнная авторизация /// </summary> /// <param name="memoryCache"></param> /// <param name="RemoteIpAddress">IP адрес пользователя</param> public static void SuccessAuthorization(string RemoteIpAddress) { var memoryCache = Service.Get <IMemoryCache>(); memoryCache.Remove(KeyToMemoryCache.LimitLogin(RemoteIpAddress)); }