Mathian
Мастер
Всем Хай!
Веб-сайты являются привлекательной мишенью для хакеров. Даже школьник может большим количеством запросов уронить сайт на котором выполняются скрипты, создающие ощутимую нагрузку на серверную операционную систему, например тем-же LOIC'ом. Чтобы самостоятельно устроить такую атаку, достаточно запустить элементарный код:
PHP:
for( int i = 0; i < 1000000; i ++ )
{
WebClient client = new WebClient();
client.DownloadString("Ссылка");
}
Самым простым способом защиты от подобного флуда является подсчёт количества запросов с определённого IP адреса и запоминание этого значения в кэше "ASP.NET". А когда количество запросов превысит допустимый лимит, то отвергать запросы с этого IP адреса на определённый промежуток времени, а потом начать обрабатывать поступающие запросы.
Ниже приведён пример класса ActionValidator, который позволяет запоминать такие параметры посетителя как первый визит, последующий визит, асинхронные Postback'и, создание новой страницы и т.д.
PHP:
public static class ActionValidator
{
private const int DURATION = 10;//Время, которое будем отвергать запросы.
public enum ActionTypeEnum
{
FirstVisit = 100,//1ый визит
ReVisit = 1000, //Последующий визит
Postback = 5000, //Асинхронные Postback'и
AddNewWidget = 100, //Виджеты
AddNewPage = 100,//Сьраницы
}
PHP:
public static bool IsValid( ActionTypeEnum actionType )
{
HttpContext context = HttpContext.Current;
if( context.Request.Browser.Crawler ) return false;
string key = actionType.ToString() + context.Request.UserHostAddress;
var hit = (HitInfo)(context.Cache[key] ?? new HitInfo());
if( hit.Hits > (int)actionType ) return false;
else hit.Hits ++;
if( hit.Hits == 1 ) context.Cache.Add(key, hit, null, DateTime.Now.AddMinutes(DURATION), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Normal, null);
return true;
}
Использовать этот класс можно прям на default.aspx:
PHP:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
if( !base.IsPostBack )
{
if( Profile.IsFirstVisit )
{
if( !ActionValidator.IsValid(ActionValidator.ActionTypeEnum.FirstVisit)) Response.End();
}
else
{
if( !ActionValidator.IsValid(ActionValidator.ActionTypeEnum.ReVisit) ) Response.End();
}
}
else
{
if( !ActionValidator.IsValid(ActionValidator.ActionTypeEnum.Postback) ) Response.End();
}
}
Защиту от DoS атак можно переложить на плечи Брандмауэров, например: Cisco.
Не многие сайты применяют подобные меры защиты своих приложений, поэтому если вам,
то можете попробовать поиздеваться над каким-нибудь сайтом, например с помощью того-же LOIC'а
Удачи Дорогие пользователи Pawno-Info.Ru xD
Последнее редактирование:
