راکت

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

2 پاسخ

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

ثبت پرسش جدید

پاسخ‌ها

2
سینا شاه‌اویسی
سینا شاه‌اویسی
@sinashahoveisi

تخصص: برنامه نویس

اول از همه کلاس 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']);
});
محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

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

مثال:

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

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

شاید پاسخ شما همین‌جا باشد

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

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