نمایش نتایج 1 تا 35 از 35

نام تاپیک: چگونه در ASP.net سایت رو در برابر حملات دی داس محافظت کنم؟

  1. #1
    کاربر دائمی آواتار mehrdad201
    تاریخ عضویت
    تیر 1386
    محل زندگی
    شمال ایران (مازندران)
    پست
    587

    چگونه در ASP.net سایت رو در برابر حملات دی داس محافظت کنم؟

    با عرض سلام خدمت همه دوستان و اساتید.

    مشکلی برام پیش اومده. خواهش دارم هر کسی میتونه کمک کنه.
    تو یکی از برنامه هایی که باید انجامش بدم در قید شده باید حتما سایت در زمینه حملات دی داس مقاوم باشه و داون نشه. (به قول خودمون نخوابه)
    من خیلی در این زمینه تحقیق کردم. اکثر این هاست های شیرینگ (sharing) قوانینشون به این صورته که اگه یه موقع سایت شما مورد حمله دی داس قرار بگیره ، کل سرور رو تحت تاثیر قرار میده در نتیجه مسئول هاستینگ سایت شما رو از مجموعه خارج میکنه و ممکنه دیگه سایت رو هاست نکنه.

    یکی به من گفت برو سرور اختصاصی بگیر. اما سرور اختصاصی جدایی از هزینه ای که در ماه داره در مقابل حملات دی داس کاری از پیش نمیبره.
    یکی گفت برو از این دی داس پروتکشن ها بگیر. طی تحقیقاتی که کردم هزینه ای بالغ بر 500 دلار در ماه داره و اصلا برای ما مقدور نیست.
    یکی گفت برو وی پی اس بگیر و روش فایروال و ... نصب کن.
    خلاصه هر کسی یه نکته ای رو بیان میکرد.

    از همه دوستانی که اطلاعاتی دارند خواهشمندم کمک کنند. چطوری میتونم سایت رو در مقابل حملات دی داس ایمن کنم. آیا حتما باید سرور اختصاصی یا وی پی اس داشته باشم؟ایا میتونم از هاستینگ اشتراکی استفاده کنم و به کمک کدهای asp.net سایت رو مقاوم کنم. خواهش میکنم هر کسی میتونه به من کمک کنه.

    سپاسگذار از همه دوستان

  2. #2
    خونسرد باش مهرداد جان. راه حلش ساده ست :)

    برخی هاست ها فایروال هایی دارن که در ظاهر وظیفشون جلوگیری از حملات DOS هست اما در نهایت بیشترین کاری که می تونن انجام بدن جلوگیری از حملات TCP SYN هست. فایروالی که بتونه سایت رو به طور کامل در برابر حملات DOS محافظت کنه ندیدم.
    در سطح برنامه نویسی، مطمئن ترین کاری که می تونی انجام بدی بررسی IP کاربر هست.
    بدین شکل که ساختاری با 3 فیلد ایجاد کنی که شامل IP کاربر، تعداد درخواست های ارسال شده و نام صفحه هست. در هر درخواست، IP کاربر و صفحه ی درخواست شده رو بازیابی کنی و یک واحد به تعداد درخواستش اضافه کنی و این 3 فیلد رو در Cache ذخیره/آپدیت کنی. مقدار AbsoluteExpiration رو برای Cache به میزان دلخواه تنظیم کن. مثلا 10 ثانیه. اینجوری می تونی متوجه بشی که اگر در 10 ثانیه مثلا 50 درخواست با یک IP برای صفحه ای مشخص ارسال شد، با یک هزار دست! روبرو هستی و احتمالا باید به موزه منتقلش کنی ;)

    موفق باشید.

  3. #3
    کاربر دائمی آواتار mehrdad201
    تاریخ عضویت
    تیر 1386
    محل زندگی
    شمال ایران (مازندران)
    پست
    587
    استاد راد منظور از ساختار همون دیتا تیبل هست؟؟؟؟

    در ضمن ، این انتقال به موزه چطوری انجام میشه. راستش در این زمینه من اصلا در حد زیر صفرم.

  4. #4
    نقل قول نوشته شده توسط mehrdad201
    منظور از ساختار همون دیتا تیبل هست؟؟؟؟
    بله. می تونه مثلا یک DataTable باشه.
    نقل قول نوشته شده توسط mehrdad201
    این انتقال به موزه چطوری انجام میشه.
    با Response.End

  5. #5
    کاربر دائمی آواتار mehrdad201
    تاریخ عضویت
    تیر 1386
    محل زندگی
    شمال ایران (مازندران)
    پست
    587
    استاد

    این کار باید در HTTPMODULE انجام بشه ؟؟؟

  6. #6
    نقل قول نوشته شده توسط mehrdad201
    این کار باید در HTTPMODULE انجام بشه ؟؟؟
    یا با HttpModule یا ایجاد یک کلاس پایه که از Page به ارث می بره و Override کردن روال OnInit و به ارث بردن بقیه ی صفحات از این کلاس پایه.

    موفق باشید.

  7. #7
    کاربر دائمی آواتار mehrdad201
    تاریخ عضویت
    تیر 1386
    محل زندگی
    شمال ایران (مازندران)
    پست
    587
    استاد یه سوال دیگه داشتم.

    این قضیه که هر بار در هر درخواست باید دیتا از کش خونده بشه. پردازشها انجام بشه ، دوباره ذخیره بشه و تصمیم گیری در مورد به موزه فرستادن یا نفرستادن گرفته بشه.

    خود این فرایند سرور رو مشغول نمیکنه ؟ فرض کنید هزاران درخواست از سوی مهاجمین فرستاده بشه. به ازای هر درخواست باید این فرایند تکرار بشه.

    نظر شما چیه ؟آیا استنباط من درسته ؟

  8. #8
    تو در اولین مرحله ی پردازش درخواست، یعنی روال BeginRequest این بررسی رو انجام میدی و در صورتی که درخواست یک حمله تشخیص داده بشه، مراحل دیگه طی نمیشه. این یک مزیت هست اما کامل نیست! درگیری کمتره اما به هر حال وجود داره.
    اینکه بشه یک پکت حاوی درخواست رو قبل از اینکه به منبع پردازش (در اینجا، IIS) ارسال بشه بررسی کرد بهترین راه حله. به همین دلیل هست که پیشنهاداتی در مورد سرور اختصاصی و راه حل های غیر برنامه نویسی دریافت کردی. اما با توجه به شرایطی که داری و محدودیت هایی که بیان کردی، روشی که توضیح دادم معقولانه ترین و کم هزینه ترین روشی هست که می تونی پیاده سازی کنی.

    موفق باشید.

  9. #9

  10. #10
    کاربر دائمی آواتار mehrdad201
    تاریخ عضویت
    تیر 1386
    محل زندگی
    شمال ایران (مازندران)
    پست
    587
    نقل قول نوشته شده توسط Behrouz_Rad مشاهده تاپیک
    تو در اولین مرحله ی پردازش درخواست، یعنی روال BeginRequest این بررسی رو انجام میدی و در صورتی که درخواست یک حمله تشخیص داده بشه، مراحل دیگه طی نمیشه. این یک مزیت هست اما کامل نیست! درگیری کمتره اما به هر حال وجود داره.
    اینکه بشه یک پکت حاوی درخواست رو قبل از اینکه به منبع پردازش (در اینجا، IIS) ارسال بشه بررسی کرد بهترین راه حله. به همین دلیل هست که پیشنهاداتی در مورد سرور اختصاصی و راه حل های غیر برنامه نویسی دریافت کردی. اما با توجه به شرایطی که داری و محدودیت هایی که بیان کردی، روشی که توضیح دادم معقولانه ترین و کم هزینه ترین روشی هست که می تونی پیاده سازی کنی.

    موفق باشید.
    ممنونم استاد
    سوال دیگه ای داشتم.

    تا اونجاییکه من متوجه شدم. دی داس پروتکشن ها لول های مختلف دادند.

    به نظر شما این سیستم که مبتنی بر برنامه نویسی هست با چه سطحی برابری داره ؟

  11. #11
    کاربر دائمی آواتار mehrdad201
    تاریخ عضویت
    تیر 1386
    محل زندگی
    شمال ایران (مازندران)
    پست
    587
    نقل قول نوشته شده توسط anubis_ir مشاهده تاپیک
    يك نمونه پياده سازي مبحث:
    http://msmvps.com/blogs/omar/archive...plication.aspx


    دوست عزیز اول از همه ا شما تشکر میکنم.

    در ثانی در این مثالی که هست.

       1: 
    for(
    int i = 0; i < 100000; i ++ )
    2: {
    3: WebClient client =
    new WebClient();
    4: client.DownloadString(
    "http://www.pageflakes.com/default.aspx");
    5: }
    این خطوط یک نوع حمله دی داسی هستند؟

  12. #12
    کاربر دائمی آواتار shahab_ksh
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تو اطاقم
    پست
    1,388
    از نظر سخت افزاری میشه چیکار کرد

  13. #13
    کاربر دائمی آواتار mehrdad201
    تاریخ عضویت
    تیر 1386
    محل زندگی
    شمال ایران (مازندران)
    پست
    587
    از نظر سخت افزاری ابزارهای سیسکو و .... هست اما هزینه بسیاری دارند.

    در ضمن دوستان اون مثالی که دوستمون در زمینه asp بیان کردند امکانش هست زبون php هم بشه این کار رو کرد؟؟؟؟؟؟؟؟

  14. #14
    کاربر دائمی آواتار mehrdad201
    تاریخ عضویت
    تیر 1386
    محل زندگی
    شمال ایران (مازندران)
    پست
    587
    نقل قول نوشته شده توسط 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
    این دقیقا چه کار میکنه؟

  15. #15
    کاربر دائمی آواتار mehrdad201
    تاریخ عضویت
    تیر 1386
    محل زندگی
    شمال ایران (مازندران)
    پست
    587
    یک تاپیک در این مورد پیدا کردم

    https://barnamenevis.org/showth...t=cache+insert

    فقط یه مقدار در مورد slidingExpiration توضیح بدید برام. که در اینجا باید چه مقداری قرار بدم؟

  16. #16
    سوالاتی که به مبحث این تاپیک مربوط نمیشن رو در یک تاپیک جداگانه مطرح بفرمایید.

    موفق باشید.

  17. #17
    نمی دونم چرا در اون کد از Crawler استفاده شده! اینجوری از ایندکس صفحات توسط موتورهای جستجو جلوگیری میشه.
    نقل قول نوشته شده توسط mehrdad201
    در مورد slidingExpiration توضیح بدید برام. که در اینجا باید چه مقداری قرار بدم؟
    به sliding نیاز نیست. باید از absolute استفاده کنی. در یک زمان فقط از یکی از این مقادیر میشه استفاده کنی.
    مقدارش رو برابر با مثلا 10 ثانیه قرار بده.

    موفق باشید.

  18. #18
    کاربر دائمی آواتار mehrdad201
    تاریخ عضویت
    تیر 1386
    محل زندگی
    شمال ایران (مازندران)
    پست
    587
    نقل قول نوشته شده توسط Behrouz_Rad مشاهده تاپیک
    نمی دونم چرا در اون کد از Crawler استفاده شده! اینجوری از ایندکس صفحات توسط موتورهای جستجو جلوگیری میشه.

    به sliding نیاز نیست. باید از absolute استفاده کنی. در یک زمان فقط از یکی از این مقادیر میشه استفاده کنی.
    مقدارش رو برابر با مثلا 10 ثانیه قرار بده.

    موفق باشید.
    مقدار sliding رو باید timestamp.zero قرار بدیم؟

  19. #19
    نقل قول نوشته شده توسط mehrdad201
    مقدار sliding رو باید timestamp.zero قرار بدیم؟
    بله........

  20. #20
    کاربر دائمی آواتار mehrdad201
    تاریخ عضویت
    تیر 1386
    محل زندگی
    شمال ایران (مازندران)
    پست
    587
    به نظر شما تعداد دفعات درخواست و بازه زمانی رو چه مقداری بگیرم مناسب هست تا دسترسی یوزرهای نورمال محدود نشه؟

  21. #21
    زمانش مثلا 30 ثانیه خوبه. خودت فکر کن یک "انسان" در 30 ثانیه حداکثر چند صفحه می تونه باز کنه. یک واحد بیشتر از اون رو میزان تخطی از میزان غیر مجاز در نظر بگیر.
    بعضی چیزها رو دیگه خودتون باید بتونید تشخیص بدید!

    موفق باشید.

  22. #22
    کاربر دائمی آواتار mehrdad201
    تاریخ عضویت
    تیر 1386
    محل زندگی
    شمال ایران (مازندران)
    پست
    587
    استاد راد

    بین رویداد begin_request و رویداد init کلاسی که از IHTTPModule مشتق شده کدوم یک زودتر اجرا میشن؟

    به نظر شما این بررسی در کدومیک از اینها انجام بشه؟

  23. #23
    BeginRequest اولین رویدادی هست که اجرا میشه. همین خوبه.

  24. #24
    کاربر دائمی آواتار mehrdad201
    تاریخ عضویت
    تیر 1386
    محل زندگی
    شمال ایران (مازندران)
    پست
    587
    استاد در مورد اون کروالر (Crawler) فرموده بودید جلو ایندکس شدن صفحات رو میگیره؟

    به نظر شما در beginrequest ازش استفاده کنم یا اینکه نه؟ آخه باید صفحات در گوگل ایندکس بشن.

  25. #25

  26. #26
    کاربر دائمی آواتار mehrdad201
    تاریخ عضویت
    تیر 1386
    محل زندگی
    شمال ایران (مازندران)
    پست
    587
    استاد راد با عرض شرمندگی بابت مزاحمت ها

    یه مشکلی پیش اومده. در حالت دیباگ متوجه شدم که وقتی یه صفحه رو اجرا میکنم چندین باز فرایند beginrequest اجرا میشه.در نتیجه اون عدد مربوط به شمارنده بیشتر از حالت عادی افزایش پیدا میکنه.

    میتونید به من بگید چرا وقتی یه صفحه رو اجرا میکنم بیش از یک بار این فرایند اجرا میشه و برای فیلتر کردن چکار باید کرد؟؟؟؟؟؟؟؟

  27. #27
    کاربر دائمی آواتار mehrdad201
    تاریخ عضویت
    تیر 1386
    محل زندگی
    شمال ایران (مازندران)
    پست
    587
    استاد راد یک سوال دیگه هم داشتم.

    وقتی در سایت از آجاکس استفاده میشه کلاینت از طریق کدهای جاوا اسکریپت با سمت سرور ارتباط برقرار میکنه.

    به عنوان مثال ما یه گرید ویو داریم که توی یه آپدیت پنل هست. وقتی میخوایم page های دیگه گرید ویو رو ببینیم از طریق آجاکسی محتویات داخل گرید اپدیت میشه.

    سوالم اینه که ایا یه مهاجم میتونه با استفاده از این کدهای جاوا اسکریپت ایجاد شده وب سایت رو مورد حملات دی داس قرار بده؟؟؟؟؟؟؟؟؟؟؟؟

    در صورتیکه جوابتون مثبت هست میشه بفرمایید برای جلوگیری از این کار چه راهی وجود داره؟

  28. #28

  29. #29
    نقل قول نوشته شده توسط mehrdad201
    سوالم اینه که ایا یه مهاجم میتونه با استفاده از این کدهای جاوا اسکریپت ایجاد شده وب سایت رو مورد حملات دی داس قرار بده؟
    اون "نمی دونم" مال پست قبلیت بود. پست بعدی رو ندیدم بودم.

    البته ارتباط جاوا اسکریپت با DDOS رو نمی دونم چیه که در موردش سوال پرسیدی اما DOS تنها از طریق فراخوانی منابعی که بر روی سرور اجرا میشن نیست! مثلا درخواست مداوم یک تصویر یا یک فایل CSS هم می تونه نوعی مشغول کردن سرور محسوب بشه!

    موفق باشید.

  30. #30
    کاربر دائمی آواتار mehrdad201
    تاریخ عضویت
    تیر 1386
    محل زندگی
    شمال ایران (مازندران)
    پست
    587
    جواب اون سوال نمیدونم رو پیدا کردم.
    میدونید استاد وقتی داشتم کار میکردم با یک مساله ای مواجه شدم.

    من تمام اون فرایند چکینگ رو داخل begin request قرار دادم.

    متوجه شدم به ازای هر ابچکت سروری (مثلا یک ابچکت تصویر یا لیبل یا یه فایل سی اس اس و ....... ) این رویداد فراخونی میشه.

    دیدم که بایستی یه فیلتر بذارم که فقط صفحات اچ تی ام ال رو چک کنه. اما خب به قول شما اگه با فراخوانی یه فایل سی اس اس سرور مشغول بشه چه راهی هست که بشو جلو این کار رو گرفت ؟؟؟؟؟؟

    اصلا میشه یا نه ؟

  31. #31
    اگر IIS در حالت Integrated باشه میشه.
    وقتی در قراردادی قرار بر این هست که موردی رعایت بشه که ملموس نیست، می تونی رعایتش نکنی! نهایتا اگر زمانی به طریقی کارفرما تونست بهت ثابت کنه که در موردی کوتاهی کردی، می تونی بهش بگی که این احتمالا یک باگ هست و اون موقع سعی کنی تا حدی که می تونی مشکل رو بر طرف کنی.
    اگر مثل الان نیاز به یک سرور اختصاصی یا استفاده از امکانات ویژه بود، به کارفرما بگو که چنین چیزی نیاز به امکانات ویژه داره. اگر هزینش رو دارید بسم ا...

    موفق باشید.
    آخرین ویرایش به وسیله Behrouz_Rad : سه شنبه 02 آذر 1389 در 20:37 عصر

  32. #32
    کاربر دائمی آواتار mehrdad201
    تاریخ عضویت
    تیر 1386
    محل زندگی
    شمال ایران (مازندران)
    پست
    587
    میدونید استاد میترسم اون موقع اینا نه نگن و ما رو بندازن تو هچل..............

    به هر حال. در صدد هستم یه فایروال خوب روی سروزی که قراره برنامه رو روش قرار بدم نصب کنم.

    یکی از دوستان ISA مایکروسافت رو پیشنهاد کرد. میخواستم بپرسم در موردش اطلاعاتی دارید ؟؟؟؟؟؟؟؟

    کلا شما خودتون بودید چه فایروالی رو انتخاب میکردید استاد راد ؟

  33. #33
    متاسفانه بنده در کار هاست نبودم و در مورد این نوع فایروال ها اطلاعی ندارم.

  34. #34
    کاربر دائمی آواتار persian_bigboy
    تاریخ عضویت
    تیر 1388
    محل زندگی
    تهران ، شمیران
    پست
    298

    نقل قول: چگونه در ASP.net سایت رو در برابر حملات دی داس محافظت کنم؟

    سلام بحث جالبی بود ولی این نوع حلمه نمیشه :
     Deny You of Service (DYOS)

    برام جالب شد . ولی دی داس روی IP اور میکنه در ضمن فکر میکنم که کسی که دی داس میکنه از یک آیپی نیست بلکه از یک رنج آیپی حلمه میکنه ، یعنی یک دفعه از 2.000 تا کلاینت حمله میکنه و شما نمی تونید بنش کنید . در ضمن برای من در ایرانسل این انتفاق افتاد کار سختی بدون امکانات فایروال مدیریت و کنترل کنی حملات حرفه ای رو .

  35. #35

    نقل قول: چگونه در ASP.net سایت رو در برابر حملات دی داس محافظت کنم؟

    روش هایی که توسط دوستان ذکر شد همه سمت application هست حالا فرض کنید حمله از طریق درخواست یک عکس انجام بشه درسته proccess کمتری نسبت به صفحه داینامیک لازم ولی IIS در حالت معمول همچین فایلی به app ارجا نمی ده پس مساله امنیت iis مطرح می شه آیا لازم برای همه فایل ها از جمله عکس، استایل شیتها و ... یک هندلر بنویسیم؟ یا راه حل دیگه ای پیشنهاد می دید؟

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •