' . nl2br(htmlspecialchars($message)) . '
false, 'message' => 'Konfigurationsfehler. Bitte kontaktieren Sie den Administrator.' ]); exit; } require_once __DIR__ . '/config.php'; // Header für JSON-Response setzen header('Content-Type: application/json; charset=utf-8'); // Nur POST-Requests erlauben if ($_SERVER['REQUEST_METHOD'] !== 'POST') { ob_clean(); http_response_code(405); echo json_encode([ 'success' => false, 'message' => 'Nur POST-Requests erlaubt.' ]); exit; } /** * Rate-Limiting prüfen */ function checkRateLimit() { if (isset($_SESSION['last_submission'])) { $timeSinceLastSubmit = time() - $_SESSION['last_submission']; if ($timeSinceLastSubmit < RATE_LIMIT_SECONDS) { return [ 'allowed' => false, 'wait_time' => RATE_LIMIT_SECONDS - $timeSinceLastSubmit ]; } } return ['allowed' => true]; } /** * Eingabe bereinigen und validieren */ function sanitizeInput($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data, ENT_QUOTES, 'UTF-8'); return $data; } /** * E-Mail-Adresse validieren */ function validateEmail($email) { return filter_var($email, FILTER_VALIDATE_EMAIL) !== false; } /** * CSRF-Token validieren (einfache Implementierung) */ function validateCSRF($token) { // Erwarteter Token-Wert (sollte mit dem im Formular übereinstimmen) return $token === 'frida-fred-csrf-2026'; } // Rate-Limiting prüfen $rateLimitCheck = checkRateLimit(); if (!$rateLimitCheck['allowed']) { ob_clean(); http_response_code(429); echo json_encode([ 'success' => false, 'message' => 'Bitte warten Sie ' . $rateLimitCheck['wait_time'] . ' Sekunden, bevor Sie erneut eine Nachricht senden.' ]); exit; } // Honeypot-Feld prüfen (sollte leer sein) if (!empty($_POST['website'])) { ob_clean(); http_response_code(400); echo json_encode([ 'success' => false, 'message' => 'Spam erkannt.' ]); exit; } // CSRF-Token prüfen if (!isset($_POST['csrf_token']) || !validateCSRF($_POST['csrf_token'])) { ob_clean(); http_response_code(403); echo json_encode([ 'success' => false, 'message' => 'Ungültiger Sicherheitstoken.' ]); exit; } // Formularfelder auslesen und validieren $name = isset($_POST['name']) ? sanitizeInput($_POST['name']) : ''; $email = isset($_POST['email']) ? sanitizeInput($_POST['email']) : ''; $subject = isset($_POST['subject']) ? sanitizeInput($_POST['subject']) : ''; $message = isset($_POST['message']) ? sanitizeInput($_POST['message']) : ''; // Pflichtfelder prüfen if (empty($name) || empty($email) || empty($subject) || empty($message)) { ob_clean(); http_response_code(400); echo json_encode([ 'success' => false, 'message' => 'Bitte füllen Sie alle erforderlichen Felder aus.' ]); exit; } // E-Mail-Adresse validieren if (!validateEmail($email)) { ob_clean(); http_response_code(400); echo json_encode([ 'success' => false, 'message' => 'Bitte geben Sie eine gültige E-Mail-Adresse ein.' ]); exit; } // Nachrichtenlänge prüfen if (strlen($message) > MAX_MESSAGE_LENGTH) { ob_clean(); http_response_code(400); echo json_encode([ 'success' => false, 'message' => 'Ihre Nachricht ist zu lang. Maximal ' . MAX_MESSAGE_LENGTH . ' Zeichen erlaubt.' ]); exit; } // E-Mail-Inhalt erstellen $emailSubject = 'Kontaktanfrage: ' . $subject; $emailBodyText = "Neue Kontaktanfrage über " . FORM_NAME . "\n\n"; $emailBodyText .= "Name: " . $name . "\n"; $emailBodyText .= "E-Mail: " . $email . "\n"; $emailBodyText .= "Betreff: " . $subject . "\n\n"; $emailBodyText .= "Nachricht:\n" . $message . "\n\n"; $emailBodyText .= "---\n"; $emailBodyText .= "Gesendet am: " . date('d.m.Y H:i:s') . "\n"; $emailBodyText .= "IP-Adresse: " . $_SERVER['REMOTE_ADDR'] . "\n"; // HTML-Version der E-Mail $emailBodyHTML = '