مهدی
2 سال پیش توسط مهدی مطرح شد
2 پاسخ

محدود کردن ارسال ریکوئست در لاراول

من یک فرم عضویت در خبر نامه دارم که نمیخوام از کپچا استفاده بکنم
چطور میتونم بگم که هر IP فقط 1 بار در هر ساعت میتونه درخواست بده
آیا روش بهتری هست برای جلوگیری از حملات
ممنون


ثبت پرسش جدید
سینا شاه‌اویسی
تخصص : برنامه نویس فرانت اند
@sinashahoveisi 2 سال پیش مطرح شد
0

اول از همه کلاس App\Providers\RouteServiceProvider را باز کن و متد configureRateLimiting رو توش اضافه کن

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Configure the rate limiters for the application.
     *
     * @return void
     */
    protected function configureRateLimiting()
    {
        RateLimiter::for('global', function (Request $request) {
            return Limit::perHour(۱)->by($request->ip());
        });
    }
}

بعد از اینکه AppServiceProvider تعریف کردی، باید روت ها یا گروه روت ها را با استفاده از throttle middleware وصل کنید. واسه این کار هم فایل routes/web.php رو باز کنید و گروه روت ها رو تعریف کنید.

<?php

use App\Http\Controllers\VideoController;

Route::middleware(['throttle:ip_address'])->group(function () {
    Route::get('/video-view', [VideoController::class, 'videoView']);
});

محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 2 سال پیش آپدیت شد
0

یک میدل ور در لاراول برای این کار تعبیه شده بنام throttle که دقیقا می‌تونید برای هر Route (در مثال شما میشه Route مربوط به submit کردن در خبرنامه) محدودیت تعداد درخواست در یک زمان مشخص تعیین کنید تا اگر بیشتر شد خود لاراول بصورت اتومات استاتوس کد 429 - Too Many Requests ارسال کنه.

مثال:

Route::post('/email/verification-notification', [EmailVerificationNotificationController::class, 'store'])
                ->middleware(['throttle:6,1']);

مثال فوق یعنی این route به ازای هر IP آدرس فقط ۶ بار در یک دقیقه می‌تونه فراخونی بشه.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام