DDoS-атаки (Distributed Denial of Service) — это координационные атаки, направленные на перегрузку вашего приложения или инфраструктуры. Для PHP-приложений важно применять многоуровневую защиту.
Пример конфига Nginx для rate limiting:
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
server {
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
proxy_pass http://php_backend;
}
}
Пример middleware для Laravel:
namespace App\Http\Middleware;
use Closure;
use Illuminate\Cache\RateLimiter;
class DDoSProtection
{
public function handle($request, Closure $next)
{
$limiter = app(RateLimiter::class);
$key = $request->ip().'|'.$request->path();
if ($limiter->tooManyAttempts($key, 30)) { // 30 запросов/мин
return response('Too many requests', 429);
}
$limiter->hit($key, 60);
return $next($request);
}
}
Пример проверки User-Agent:
$badBots = ['bot', 'crawler', 'spider'];
$userAgent = strtolower($_SERVER['HTTP_USER_AGENT'] ?? '');
foreach ($badBots as $bot) {
if (strpos($userAgent, $bot) !== false) {
http_response_code(403);
exit('Access denied');
}
}
Пример ограничения API в Laravel:
Route::middleware(['throttle:api'])->group(function () {
Route::apiResource('posts', PostController::class);
});
Пример скрипта блокировки IP:
$attackerIps = ['192.168.1.1', '10.0.0.2'];
if (in_array($_SERVER['REMOTE_ADDR'], $attackerIps)) {
file_put_contents('/var/www/blocked_ips.txt', $_SERVER['REMOTE_ADDR']."\n", FILE_APPEND);
exit('Your IP has been blocked');
}
Пример нагрузочного теста с k6:
import http from 'k6/http';
import { check, sleep } from 'k6';
export let options = {
stages: [
{ duration: '1m', target: 100 }, // нормальная нагрузка
{ duration: '1m', target: 1000 }, // пиковая нагрузка
],
};
export default function () {
let res = http.get('https://your-app.com/api');
check(res, { 'status was 200': (r) => r.status == 200 });
sleep(1);
}
Защита от DDoS требует комплексного подхода, сочетающего инфраструктурные решения (CDN, WAF), настройки веб-сервера, логику в самом приложении и продуманную архитектуру. Для PHP-приложений критически важно минимизировать ресурсоемкие операции и реализовать многоуровневые лимиты запросов. Регулярное тестирование на устойчивость и подготовленный план реагирования помогут минимизировать ущерб от реальных атак.