Доверенные прокси
Чтобы request()->ip() возвращал адрес посетителя, а не узла фильтрации, укажите адреса фильтра в списке доверенных прокси. Не используйте «доверять всем» — иначе адрес можно подделать заголовком. В Laravel 10 и раньше то же задаётся свойством $proxies в классе App\Http\Middleware\TrustProxies.
// bootstrap/app.php (Laravel 11+)
->withMiddleware(function (Middleware $middleware) {
$middleware->trustProxies(at: [
'203.0.113.0/24', // адреса узлов фильтрации (условные)
]);
})Throttle и лимиты фильтра
Middleware throttle и RateLimiter считают запросы по ключу, который вы задаёте. Чаще всего это $request->ip(), и если доверенные прокси не настроены, все посетители получают один адрес узла фильтрации и одновременно упираются в лимит. Для входа полезно ограничивать по связке «логин + адрес», для API — по пользователю или токену Sanctum.
// app/Providers/AppServiceProvider.php, метод boot()
RateLimiter::for('login', function (Request $request) {
return [
Limit::perMinute(5)->by(Str::lower($request->input('email')).'|'.$request->ip()),
Limit::perMinute(30)->by($request->ip()),
];
});Адреса, которые стоит защитить
| Адрес | Правило |
|---|---|
| /login, /register, /forgot-password (Breeze, Fortify, Jetstream) | Лимиты на попытки и на отправку писем, проверка браузера при всплеске |
| /api/* | Лимиты по токену и методу; без проверки браузера для мобильного приложения |
| /livewire/update (Livewire 3) | Лимиты на сессию |
| /horizon, /telescope, /pulse | Закрыть от интернета: доступ только с разрешённых адресов |
| /sanctum/csrf-cookie | Не блокировать: SPA запрашивает его перед входом |
Livewire и SPA
Запросы Livewire и SPA к API идут через XHR. Проверка браузера для них проходит один раз на странице, после чего запросы выполняются с полученным токеном.
Что исключить из проверки браузера
- Вебхуки платёжных систем и сервисов — например, маршрут Cashier /stripe/webhook или ваши /webhooks/*. Их подлинность проверяет подпись, а не браузер.
- Маршрут /up (Laravel 11+), который опрашивает мониторинг.
- Входящие запросы интеграций по API-ключу.
Очереди и планировщик (queue:work, schedule:run) работают из командной строки и через фильтр не проходят — их перенастраивать не нужно.
Типичные ошибки
trustProxies(at: '*')при сервере, доступном напрямую: заголовок X-Forwarded-For принимается от кого угодно, и адрес можно подделать. Настоящий IP сервера стоит скрыть.- Telescope включён в продакшене и открыт — он показывает запросы, исключения и данные пользователей.
- APP_DEBUG=true — страница ошибки раскрывает конфигурацию и пути.
Вопросы и ответы
Заменит ли фильтр middleware throttle?
Нет. Фильтр отсекает массовую часть атаки ещё до сервера, а throttle остаётся для точных лимитов по пользователям, токенам и бизнес-операциям, которые видит только приложение.
Что меняется для Laravel Octane?
Настройка доверенных прокси та же. Octane ускоряет обработку, но число воркеров по-прежнему ограничено, и медленные запросы к базе при флуде занимают их так же, как и без него.
Читайте также
- ВозможностиЗащита API от DDoS, ботов и злоупотребленийЛимиты по ключам, схема запросов, защита мобильных приложений
- ВозможностиОграничение скорости запросовОтдельные лимиты для поиска, корзины, входа и API
- ВозможностиЗащита формы входа от перебора паролейОтражение перебора и подстановки паролей из утечек
- АтакиАтаки на API: признаки и защитаПерегрузка, перебор и злоупотребление логикой API