wilfreedi / laravel-site-protection
Site protection
0.1.9
2025-02-02 19:22 UTC
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.0
Requires (Dev)
- orchestra/testbench: ^7.2
- phpunit/phpunit: ^9.5
README
Laravel Site Protection
Базовая защита сайта на laravel
Простоя защита сайта на laravel
Возможности
- Установить лимит на кол-во заходов пользователя за n времени
- Установить лимит на кол-во заходов пользователя на старницу 404
- Идентификация ботов по useragent
При достижении лимитов или идентификации бота, происходит редирект на страницу проверки с капчей, после успешной прохождении капчи, ip адрес заносится в белый список на 1 час
Установка
composer require wilfreedi/laravel-site-protection
Добавление middleware
Добавить middleware в app/Http/Kernel.php
или на конкретный маршрут
protected $middlewareGroups = [ 'web' => [ ... \Wilfreedi\SiteProtection\Middleware\SiteProtectionMiddleware::class ], ... ];
Проверка работы JS у пользователя
- Включаем в настройках проверку JS
js.check
=true
- Генерируем рандомный ключ AES-128 (длина 16 байт) и добавляем его в
js.key
, он будет использоваться для шифрования передаваемых данных с JS на сервер - Выводим сгенерированный ключ в шапке сайта
<meta name="protection-key" content="{{ config('siteprotection.js.key') }}">
- Подключаем JS скрипт проверки
<script defer="defer" type="application/javascript" src="{{ asset('site-protection/js/script.js') }}"></script>
(JS скрипт нужно опубликовать у себя, через команду публикации файла настроек)
Публикация файла настроек
php artisan vendor:publish --provider="Wilfreedi\SiteProtection\SiteProtectionServiceProvider"
Что входит в настройки
Ключ | Тип | Значение | Что делает |
---|---|---|---|
enabled |
bool |
true/false |
включение защиты сайта |
theme_color |
string |
white/black |
цвет темы на странице проверки капчи |
description |
string |
<p>Мы заме..</p> |
текст, выводится на странице капчи |
js.check |
bool |
true/false |
проверка, что js включен |
js.key |
string |
1234567890abcdef |
ключ для шифрования передаваемых данных через js на сервер, AES-128 (длина 16 байт) |
captcha.provider |
string |
recaptcha/yandex |
сервис капчи |
bots.enabled_all |
bool |
true/false |
включение отправки на капчу всех, у кого в useragent есть вхождение - bot |
bots.blocked |
array |
['Bytespider'...] |
название ботов для блокировки |
bots.allowed |
array |
['Yandexbot'...] |
название ботов, которых пропускам(в случа если включен bots.enabled_all, но нужно пропустить ботов, например яндекс) |
rate_limiting.max_requests |
int |
5 |
максимальное кол-во запросов |
rate_limiting.time |
int |
1 |
за какое время (секунды) |
404_protection.max_404_errors |
int |
5 |
максимальное кол-во ответов 404 |
404_protection.time |
int |
15 |
за какое время (секунды) |
exclude_paths |
array |
['panel'...] |
список страниц, которые нужно исключить из защиты |
Рекомендации
Сохранение текущего состояния пользователя(кол-во заходов, черный/белый список) находится в кэше
Рекомендуется установить кеширование в redis
CACHE_DRIVER=redis
Сообщить о проблеме
Если вы обнаружите ошибку или у вас есть предложения по улучшению библиотеки, пожалуйста напишите нам