نوشته شده توسط
Behrouz_Rad
خونسرد باش مهرداد جان. راه حلش ساده ست :)
برخی هاست ها فایروال هایی دارن که در ظاهر وظیفشون جلوگیری از حملات DOS هست اما در نهایت بیشترین کاری که می تونن انجام بدن جلوگیری از حملات TCP SYN هست. فایروالی که بتونه سایت رو به طور کامل در برابر حملات DOS محافظت کنه ندیدم.
در سطح برنامه نویسی، مطمئن ترین کاری که می تونی انجام بدی بررسی IP کاربر هست.
بدین شکل که ساختاری با 3 فیلد ایجاد کنی که شامل IP کاربر، تعداد درخواست های ارسال شده و نام صفحه هست. در هر درخواست، IP کاربر و صفحه ی درخواست شده رو بازیابی کنی و یک واحد به تعداد درخواستش اضافه کنی و این 3 فیلد رو در Cache ذخیره/آپدیت کنی. مقدار AbsoluteExpiration رو برای Cache به میزان دلخواه تنظیم کن. مثلا 10 ثانیه. اینجوری می تونی متوجه بشی که اگر در 10 ثانیه مثلا 50 درخواست با یک IP برای صفحه ای مشخص ارسال شد، با یک هزار دست! روبرو هستی و احتمالا باید به موزه منتقلش کنی ;)
موفق باشید.
استاد راد. یه جایی به مشکل خوردم.
ببینید من یه کلاس به اسم پروتکشن اضافه کردم به پروژه که از iHTTPModule مشتق شده
public class Protection : System.Web.IHttpModule
در بخش init این کد رو قرار دادم
public void Init(HttpApplication context)
{
context.AuthorizeRequest += new EventHandler(context_AuthorizeRequest);
//throw new NotImplementedException();
}
در داخل رویداد مورد نظر هم این کدها رو نوشتم
void context_AuthorizeRequest(object sender, EventArgs e)
{
HttpApplication xHttpApplication = sender as HttpApplication;
if (xHttpApplication.Context.Request.Browser.Crawler)
xHttpApplication.Context.Response.End();
else
{
string key = xHttpApplication.Context.Request.UserHostAddress;
int hit = (int)(xHttpApplication.Context.Cache[key] ?? 0);
if (hit > ValidatorCount)
xHttpApplication.Response.End();
else
hit++;
//# Add Data To Cache #//
//xHttpApplication.Context.Cache.Add(key ,hit ,null ,DateTime.Now.AddSeconds(ValidatorSecond),
}
}
یه مشکلی که دارم اینه که Context.Cache.Add پارامترهایی داره که دقیقا نمیدونم بعضیهاشون رو باید چطوری مقدار بدم. یه توضیحی در موردش برام میدید؟
================
در ضمن یه همچین کدی تو اون مثالی که دوستمون ادرسش رو داده بودن بود.
Context.Request.Browser.Crawler
این دقیقا چه کار میکنه؟