sagarkc/laravel-bot-throttle

Advanced bot detection and request throttling package for Laravel by Sagar KC

v1.0.0 2025-05-23 03:27 UTC

This package is auto-updated.

Last update: 2025-05-26 14:10:17 UTC


README

Laravel Bot Throttle is an advanced middleware package for Laravel to detect and block bots, throttle abuse, and protect your routes. Developed and maintained by Sagar KC

๐Ÿš€ Features

  • ๐Ÿ›ก๏ธ Detects bots based on User-Agent patterns
  • โ›” Temporarily bans malicious IPs via cache
  • ๐Ÿ“ˆ Logs bot activity to a dedicated log file (botthrottle.log)
  • ๐Ÿ”„ Customizable request throttling per IP and route
  • โš™๏ธ IP whitelisting and block control
  • ๐Ÿงฉ Fully configurable via config/botthrottle.php

๐Ÿ“ฆ Installation

composer require sagarkc/laravel-bot-throttle

๐Ÿ› ๏ธ Publish the Config File

php artisan vendor:publish --provider="BotThrottle\BotThrottleServiceProvider"

This will publish config/botthrottle.php which allows full customization, you can add the list of bots as per your need.

๐Ÿ“ Optional: Enable Custom Bot Log File

To log bot activity in a separate file (storage/logs/botthrottle.log), add the following line to the channels array in your config/logging.php file:

'channels' => array_merge(config('logging.channels'), config('botthrottle.log_channel')),

This merges the custom botthrottle log channel defined in config/botthrottle.php into Laravel's logging system.

After this, all blocked bots will be logged in botthrottle.log instead of the default laravel.log.

๐Ÿงช Usage

Apply middleware to your routes:

Route::middleware(['detect.bot', 'throttle.bot'])->group(function () {
    Route::get('/api/data', 'ApiController@getData');
});

โš™๏ธ Configuration Example

return [
    'throttle' => [
        'max_attempts' => 100,
        'decay_minutes' => 1,
    ],
    'bot_detection' => [
        'user_agents' => [
            'curl', 'python', 'bot', 'spider', 'crawler', 'wget', 'httpclient', 'scrapy', 'axios'
        ],
        'ip_blacklist' => [],
        'log_bots' => true,
    ],
    'advanced' => [
        'log_all_bots' => true,
        'ban_duration_minutes' => 60,
        'block_response_code' => 403,
        'allow_whitelist_ips' => true,
        'whitelist_ips' => ['127.0.0.1'],
    ],
    'log_channel' => [
        'botthrottle' => [
            'driver' => 'single',
            'path' => storage_path('logs/botthrottle.log'),
            'level' => 'warning',
        ],
    ],
];

๐Ÿ“Š View Blocked IPs (Programmatically)

use BotThrottle\BotLog;

$blockedIps = BotLog::getBlockedIps();

๐Ÿ“„ License

MIT ยฉ Sagar KC

๐Ÿ™Œ Contributing

Pull requests and issues are welcome. Please fork the repository and open a PR with improvements or bug fixes.