request; if ($request->method === Method::POST) { $this->validateHoneypot($request); } return $next($context); } private function validateHoneypot(Request $request): void { $honeypotName = $request->parsedBody->get('_honeypot_name'); if (! $honeypotName) { $this->logSuspiciousActivity('Missing honeypot name', $request); throw new \Exception('Spam-Schutz ausgelöst'); } $honeypotValue = $request->parsedBody->get($honeypotName); // Honeypot wurde ausgefüllt = Bot erkannt if (! empty($honeypotValue)) { $this->logSuspiciousActivity("Honeypot filled: {$honeypotName} = {$honeypotValue}", $request); throw new \Exception('Spam-Schutz ausgelöst'); } // Zusätzliche Zeit-basierte Validierung (optional) $this->validateSubmissionTime($request); } private function validateSubmissionTime(Request $request): void { // Formulare, die zu schnell abgeschickt werden, sind verdächtig $startTime = $request->parsedBody->get('_form_start_time'); if ($startTime && (time() - (int)$startTime) < 2) { $this->logSuspiciousActivity('Form submitted too quickly', $request); throw new \Exception('Spam-Schutz ausgelöst'); } } private function logSuspiciousActivity(string $reason, Request $request): void { $this->logger?->warning('Honeypot triggered', [ 'reason' => $reason, 'ip' => $request->server->getClientIp()->isPrivate(), 'user_agent' => $request->headers->get('User-Agent') ?? 'unknown', 'url' => $request->path, ]); } }