Contact Us
Please fix the following:
- = h($e) ?>
$maxLen) $v = mb_substr($v, 0, $maxLen); return $v; } // ====== CSRF TOKEN ====== if (empty($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } // ====== STATE ====== $errors = []; $success = false; $name = ''; $email = ''; $phone = ''; $subject = ''; $message = ''; // ====== HANDLE POST ====== if ($_SERVER['REQUEST_METHOD'] === 'POST') { // Rate limit (simple) $now = time(); $last = $_SESSION['last_submit_ts'] ?? 0; if (is_int($last) && ($now - $last) < 30) { $errors[] = 'Please wait 30 seconds before sending another message.'; } // CSRF check $csrf = $_POST['csrf_token'] ?? ''; if (!is_string($csrf) || !hash_equals($_SESSION['csrf_token'], $csrf)) { $errors[] = 'Security check failed. Please refresh the page and try again.'; } // Honeypot check $honeypot = $_POST['website'] ?? ''; if (is_string($honeypot) && trim($honeypot) !== '') { // Pretend success (don’t tell bots they were caught) $success = true; } // Pull fields (even if honeypot tripped; keeps response consistent) $name = post_string('name', 120); $email = post_string('email', 254); $phone = post_string('phone', 40); $subject = post_string('subject', 120); $message = post_string('message', 5000); // Validate only if honeypot NOT tripped if (!$success) { if ($name === '') $errors[] = 'Name is required.'; if ($email === '') $errors[] = 'Email is required.'; if ($message === '') $errors[] = 'Message is required.'; if ($email !== '' && !filter_var($email, FILTER_VALIDATE_EMAIL)) { $errors[] = 'Please enter a valid email address.'; } // Basic phone clean (optional) if ($phone !== '') { $phone = preg_replace('/[^\d\+\-\s\(\)]/', '', $phone) ?? ''; $phone = trim($phone); } // Normalise message newlines $message = preg_replace("/\r\n|\r/", "\n", $message) ?? $message; // Build email if (!$errors) { $safeName = clean_line($name); $safeEmail = clean_line($email); $safeSubject = clean_line($subject); $finalSubject = $subjectTag . ' ' . ($safeSubject !== '' ? $safeSubject : 'New message'); $bodyLines = [ "New contact form submission from {$siteName}", "", "Name: {$safeName}", "Email: {$safeEmail}", "Phone: " . ($phone !== '' ? $phone : '—'), "Subject: " . ($safeSubject !== '' ? $safeSubject : '—'), "", "Message:", $message, "", "IP: " . ($_SERVER['REMOTE_ADDR'] ?? 'unknown'), "Time: " . date('c'), ]; $body = implode("\n", $bodyLines); // Headers: From should be YOUR domain; Reply-To can be the user $headers = []; $headers[] = "MIME-Version: 1.0"; $headers[] = "Content-Type: text/plain; charset=UTF-8"; $headers[] = "From: {$siteName} <{$fromEmail}>"; $headers[] = "Reply-To: {$safeName} <{$safeEmail}>"; $headers[] = "X-Content-Type-Options: nosniff"; $ok = @mail($toEmail, $finalSubject, $body, implode("\r\n", $headers)); if ($ok) { $success = true; $_SESSION['last_submit_ts'] = $now; // Optional: rotate CSRF token after successful submit $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); // Clear form fields after success $name = $email = $phone = $subject = $message = ''; } else { $errors[] = 'Message could not be sent (server mail is not configured).'; } } } } ?>
Please fix the following: