olssonm / blockip
Block requests from specified IPs in Laravel 5.
Requires
- php: >=7.3|^8.0
- illuminate/support: ^8.0
Requires (Dev)
- orchestra/testbench: ^6.0
README
Block requests from specified IPs quick and easy in Laravel. Highly customizable.
Version Compatibility
Installation
Via Composer
$ composer require olssonm/blockip
Add the service provider to the providers array in config/app.php
(auto-detection also available in newer Laravel-versions).
<?php 'providers' => [ Olssonm\Blockip\BlockipServiceProvider::class ]
Usage
This backage sets up the blockip
-middleware for use in your application. All routes that uses the middlareware is protected from unwanted requests.
Use in a group
<?php Route::group(['middleware' => 'blockip'], function() { Route::get('/', ['as' => 'start', 'uses' => 'StartController@index']); Route::get('/page', ['as' => 'page', 'uses' => 'StartController@page']); });
Singe route
<?php Route::get('/', [ 'as' => 'start', 'uses' => 'StartController@index', 'middleware' => 'blockip' ]);
Configuration
Run the command $ php artisan vendor:publish --provider="Olssonm\Blockip\BlockipServiceProvider"
to publish the packages configuration. In config/blockip.php
you can edit your settings:
<?php return [ // IPs to block 'ips' => [ '37.123.187.245', // an example of a single IP '23.20.0.0/14' // an example of an IP-range with CIDR-notation ], // Message for blocked requests 'error_message' => '401 Unauthorized.', // Uncomment to use a view instead of plaintext message // 'error_view' => 'blockip::default', // Environments where the middleware is active 'envs' => [ 'testing', 'development', 'production' ], // Main handler for the getIp(), getIpsToBlock() and getError-methods(). // Check the documentation on how to customize this to your liking. 'handler' => Olssonm\Blockip\Handlers\BlockipHandler::class, ];
Everything here is pretty much self explanatory, but because the blockip-handler is customizable you can pretty much change every aspect of the middleware.
If you want to write your own handler, you should implement the Olssonm\Blockip\Handlers\BaseHandler
-interface, like so:
<?php use Olssonm\Blockip\Handlers\BaseHandler; class MyHandler implements BaseHandler { /** * @return string */ public function getIp() { // Method to retrieve the request IP } /** * @return array */ public function getIpsToBlock() { // Method to set what IPs to be blocked } /** * @return response */ public function getError() { // Method to set the response } }
Using the system you have the ability to for example make your getIpsToBlock()
-method check IPs from an API, your getError()
return a JSON-response etc. etc.
Note: the default handler already checks for the special HTTP_CF_CONNECTING_IP
-header when using the Cloudflare CDN.
Testing
$ composer test
or
$ phpunit
Laravel always runs in the "testing" environment while running tests. Make sure that testing
is set in the envs
-array in blockip.php
.
License
The MIT License (MIT). Please see License File for more information.
© 2021 Marcus Olsson.