آفلاین
user-avatar

بلاک کردن یک یوزر در لاراول وقتی تعداد درخواست ها زیاد باشد

2 سال پیش
توسط Igo آپدیت شد
آفلاین
user-avatar
علی ( 14211 تجربه )
2 سال پیش
تخصص : Laravel

سلام
بعضی از هکرها با استفاده از نرم افزارهایی مثل burp یک درخواست تکراری رو به تعداد زیاد مثلا 100 مرتبه در ثانیه تکرار میکنند. حالا سوال اینه چجوری میشه این درخواست ها رو از یک ای پی خاص گه در ثانیه از حد معمولی بالاتر میره رو جواب نداد و بلاک کرد ؟
بدون استفاده از api . چون api خودش با استفاده از trottle این کارو میکنه .

بهترین پاسخ انتخاب شده توسط علی
آفلاین
user-avatar
حسین حسین پور
2 سال پیش

این متدیه که من برای این که کاربر در هر 10 ثانیه بیشتر از 2 تا کامنت نتونه ثبت کنه قرار دادم.
از redis هم استفاده کردم چون برای این جور کار ها بهینه ترین گزینه موجود هستش.

    public function checkTooManyComments( $user_id ) {
        $counter = Redis::get( 'uCommentCounter:' . $user_id );
        if ( $counter == 0 ) {
            Redis::set( 'uCommentCounter:' . $user_id, 1, 'EX', 10 );
            return true;
        } elseif ( $counter >= 2 ) {
            return false; // اینجا میتونی کاربر رو بلاک کنی یا جلوی عملیات رو بگیری
        }
        Redis::incr( 'uCommentCounter:' . $user_id ); 
        return true;
    }

شما میتونی به جای user_id بیای IP قرار بدی

آفلاین
user-avatar
حسین حسین پور ( 9366 تجربه )
2 سال پیش
تخصص : طراح رابط کاربری، برنامه‌نویس

این متدیه که من برای این که کاربر در هر 10 ثانیه بیشتر از 2 تا کامنت نتونه ثبت کنه قرار دادم.
از redis هم استفاده کردم چون برای این جور کار ها بهینه ترین گزینه موجود هستش.

    public function checkTooManyComments( $user_id ) {
        $counter = Redis::get( 'uCommentCounter:' . $user_id );
        if ( $counter == 0 ) {
            Redis::set( 'uCommentCounter:' . $user_id, 1, 'EX', 10 );
            return true;
        } elseif ( $counter >= 2 ) {
            return false; // اینجا میتونی کاربر رو بلاک کنی یا جلوی عملیات رو بگیری
        }
        Redis::incr( 'uCommentCounter:' . $user_id ); 
        return true;
    }

شما میتونی به جای user_id بیای IP قرار بدی

آفلاین
user-avatar
Igo ( 3869 تجربه )
2 سال پیش

سلام
ببین دوست عزیز هر سایت یه سرور داره مثلا nginx یا Apache و یا iis یا هر سرور دیگه ایی. این سرور یه برنامه کاملا parallel هست.
کار این سرور اینه روی یک پورت خاصی از یک Ip شروع میکنه به گوش دادن (مثلا Ip:192.168.50 و port:5050)
و هر درخواستی که بهش میرسه رو توی یک Thread جداگانه به سایتی که شما طراحی کردید ارجاع میده.
خوبه حالا فرض کنید که اقای هکر با همین برنامه که شما گفتید در هر ثانیه تعداد زیادی درخواست به سایت شما بفرسته چه اتفاقی رخ میده ؟؟؟
عملا سرور کرش میکنه و بسته میشه و دیگه اصلا به کدهایی که شما نوشتید نمیرسه که بخواهید مقابله کنید باهاش.

آفلاین
user-avatar
حسین حسین پور ( 9366 تجربه )
2 سال پیش
تخصص : طراح رابط کاربری، برنامه‌نویس

@Igo
بعد فایده trottle در لاراول یا متد های دیفالتی مثل hasTooManyLoginAttempts چیه اون وقت ؟ اگر منظورتون اینه که وب سرور کرش میکنه که اکثر موارد اینطوری نیست و وب سرور به این راحتیا کرش نمیکنه مگه اینکه واقعا سیستم ضعیف باشه. اگر هم اینکه حملات توزیع شده باشه و از جاهای مختلف باشه (یعنی اینکه شما باید سایت خیلی خیلی بزرگی باشید که هکر ها کلی وقت و هزینه بذارن تا با proxy های زیاد به شما حمله کنن)که در این حالت هم برنامه های آنتی دیداسی هست که نصب میکنن رو سیستم عامل که اون ها خیلی سریع میتونن IP های مهاجم رو بلاک کنن و فوقش سایتتون چند ساعت بلاک میشه.
ولی تجربه من اینه اکثرا دیتابیس که عملیات I/O رو انجام میده تو درخواست های بالا معمولا از همه بیشتر مصرف منابعش میره بالا و این متد ها میتونن جلوی کرش کردن دیتابیس رو بگیرن.

آفلاین
user-avatar
Igo ( 3869 تجربه )
2 سال پیش

@hhp14111
این نوع حملات متخص به لاراول و php نمیشه باید کلی بحث بشه.

متدهای مانند hasTooManyLoginAttempts یا متد های دیگر مال زمانیه که آقای هکر میخواهد رمز عبور یک کاربر رو حدس بزنه و با چند بار امتحان پسورد رمز عبور رو پیدا کنه یا با استفاده از کرکر و پس لیست شروع کنه به امتحان رمز های عبور متفاوت در اینصورت باید بعد چند بار وارد شدن رمز عبور اشتباه اکانت وارد شده یه مدت زمانی قفل بشه مثلا 24 ساعت.

یا مثلا برای بخش نظرها باید با استفاده از ای پی کاربر که درخواست ارسال کرده چک بشه که این درخواست اسپم هست یا نه. در غیر این صورت اقای هکر با یه حلقه جاوااسکریپتی 2 خطی در عرض چند ثانیه میتونه هزاران نظر در سایت شما ثبت کنه.

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

ماهیت این حملات که بالا توضیح دادم با حملات Ddos فرق میکنه این دوستمون منظورشون حملات Ddos نبود که من اشتباه متوجه شدم و در پاسخ قبلی درباره حملات Ddos توضیح دادم. ولی باید به نکات زیر توجه داشت

اولا اینکه تمام سرور ها یا هاست های اشتراکی باید آنتی دیداس روشون نصب شده باشه.

دوم اینکه هیچ انتی دیداسی نمیتونه کاملا جلوی حملات دیداس رو بگیره ( انتی دیداس خودش یه برنامه اس و حداقل 9-10 خط کد داره که باید توسط Cpu پردازش بشه و هیچ Cpu قادر به پردازش چند میلیون درخواست در یک ثانیه نیست و عملا انتی دیداس هم کرش میکنه و هیچ برنامه تحت سیستم عامل قادر به جلوگیری از حملات دیداس نیست).

سوم اینکه بحث بزرگ و کوچک بودن سایت یا معروف بودن سایت نیست بحث راه مقابله با این نوع حملات که عملا راه مقابله ایی در سیستم عامل وجود نداره

برای ارسال پاسخ باید وارد سایت شوید