'', 'email' => '', 'message' => '']; // Process form submission if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['contact_form_submit'])) { $formSubmitted = true; // Spam Prevention 1: Honeypot field (should be empty) if (!empty($_POST['website'])) { $formErrors[] = 'Spam detected.'; } // Spam Prevention 2: Time-based check (form must be visible for at least 3 seconds) $formStartTime = isset($_POST['form_start_time']) ? (int)$_POST['form_start_time'] : 0; $timeDiff = time() - $formStartTime; if ($timeDiff < 3) { $formErrors[] = 'Form submitted too quickly.'; } // Spam Prevention 3: Referrer check (only if referrer is present and clearly from different domain) if (!empty($_SERVER['HTTP_REFERER'])) { $referrer = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST); $currentHost = $_SERVER['HTTP_HOST']; // Only block if referrer exists and doesn't match (allows empty referrer for privacy browsers) if ($referrer && $referrer !== $currentHost && $referrer !== 'localhost') { $formErrors[] = 'Invalid form submission.'; } } // Spam Prevention 4: Rate limiting (session-based) if (session_status() === PHP_SESSION_NONE) { session_start(); } $lastSubmitTime = isset($_SESSION['last_contact_submit']) ? $_SESSION['last_contact_submit'] : 0; if (time() - $lastSubmitTime < 60) { $formErrors[] = 'Vennligst vent litt før du sender inn igjen.'; } // Get and sanitize form data $formData['name'] = trim($_POST['name'] ?? ''); $formData['email'] = trim($_POST['email'] ?? ''); // Normalize line endings in message (convert \r\n to \n) $formData['message'] = trim(str_replace("\r\n", "\n", $_POST['message'] ?? '')); // Validation if (empty($formData['name'])) { $formErrors[] = 'Vennligst oppgi navn.'; } elseif (strlen($formData['name']) > 100) { $formErrors[] = 'Navnet er for langt.'; } if (empty($formData['email'])) { $formErrors[] = 'Vennligst oppgi e-postadresse.'; } elseif (!filter_var($formData['email'], FILTER_VALIDATE_EMAIL)) { $formErrors[] = 'Ugyldig e-postadresse.'; } elseif (strlen($formData['email']) > 100) { $formErrors[] = 'E-postadressen er for lang.'; } if (empty($formData['message'])) { $formErrors[] = 'Vennligst skriv en melding.'; } elseif (strlen($formData['message']) < 10) { $formErrors[] = 'Meldingen er for kort (minimum 10 tegn).'; } elseif (strlen($formData['message']) > 5000) { $formErrors[] = 'Meldingen er for lang (maksimum 5000 tegn).'; } // Spam Prevention 5: Check for suspicious patterns $spamPatterns = [ '/\[url=/i', '/\[link=/i', '/debug = 1; // Uncomment to see SMTP debug output $mail->SetSMTPhost($smtpConfig['host']); $mail->SetSMTPport($smtpConfig['port']); $mail->SetSMTPuser($smtpConfig['username']); $mail->SetSMTPpass($smtpConfig['password']); $mail->SetSender([$smtpConfig['from_email'] => $smtpConfig['from_name']]); $mail->AddRecipient([$smtpConfig['to_email'] => $smtpConfig['to_name']]); $mail->AddReplyTo([$formData['email'] => $formData['name']]); $mail->SetSubject('Ny henvendelse fra kontaktskjema'); $mail->SetBodyText($emailBody); // Capture any output from PHPMailer.Lite (it might exit() on error) ob_start(); $mailSent = @$mail->Send('smtp'); $smtpOutput = ob_get_clean(); // Check if there was an error in the output if (!$mailSent || stripos($smtpOutput, 'error') !== false || stripos($smtpOutput, '✗') !== false) { $mailSent = false; error_log("SMTP Send failed. Output: " . strip_tags($smtpOutput)); $formErrors[] = 'Det oppstod en feil ved sending av meldingen. Vennligst prøv igjen senere.'; } } catch (\Exception $e) { $mailSent = false; error_log("PHPMailer Exception: " . $e->getMessage()); $formErrors[] = 'Det oppstod en feil ved sending av meldingen. Vennligst prøv igjen senere.'; } } } else { // Fallback to native mail() function $headers = "From: kontaktskjema@stopplidelsen.no\r\n"; $headers .= "Reply-To: " . $formData['email'] . "\r\n"; $headers .= "X-Mailer: PHP/" . phpversion() . "\r\n"; $headers .= "Content-Type: text/plain; charset=UTF-8\r\n"; $mailSent = mail('ruben@stopplidelsen.no', 'Ny henvendelse fra kontaktskjema', $emailBody, $headers); } if ($mailSent) { $formSuccess = true; $_SESSION['last_contact_submit'] = time(); // Clear form data on success $formData = ['name' => '', 'email' => '', 'message' => '']; } else { if (empty($formErrors)) { $formErrors[] = 'Det oppstod en feil ved sending av meldingen. Vennligst prøv igjen senere.'; } } } } // Generate form start time token $currentTime = time(); ?>

Kontaktskjema

Har du spørsmål, innspill eller ønsker å delta i arbeidet vårt? Fyll ut skjemaet nedenfor! Men husk at det kan ta tid før du får svar, vi er ikke så mange og driver alt på frivillig basis.

Takk for din henvendelse!

Vi har mottatt meldingen din og vil svare så snart som mulig.

Vennligst rett opp følgende:

Minimum 10 tegn, maksimum 5000 tegn.