Contact Us
Say hello, using this contact form.
You must set-up a valid (to) email address before this contact page will work.'; } // CSRF защита if (empty($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } // Rate limiting (максимум 3 отправки за 10 минут) $current_time = time(); if (!isset($_SESSION['form_submissions'])) { $_SESSION['form_submissions'] = []; } // Удаляем старые записи (старше 10 минут) $_SESSION['form_submissions'] = array_filter($_SESSION['form_submissions'], function($timestamp) use ($current_time) { return ($current_time - $timestamp) < 600; }); // Обработка отправки формы if (isset($_POST['contact_submitted'])) { // Проверка CSRF токена if (!isset($_POST['csrf_token']) || !hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) { $error_message = 'Security token mismatch. Please refresh the page and try again.'; } // Проверка rate limiting elseif (count($_SESSION['form_submissions']) >= 3) { $error_message = 'Too many submissions. Please wait 10 minutes before trying again.'; } else { // Получение и очистка данных $yourname = trim($_POST['your_name'] ?? ''); $youremail = trim($_POST['your_email'] ?? ''); $yourmessage = trim($_POST['your_message'] ?? ''); $user_answer = trim($_POST['user_answer'] ?? ''); // Проверка капчи (ответ хранится в сессии) $captcha_correct = isset($_SESSION['captcha_answer']) && (int)$user_answer === (int)$_SESSION['captcha_answer']; // Валидация всех полей if (email_is_valid($youremail) && !empty($yourname) && !empty($yourmessage) && $captcha_correct) { // Формирование сообщения $message = "Name: " . $yourname . "\r\n"; $message .= "Email: " . $youremail . "\r\n"; $message .= "Message:\r\n" . $yourmessage; // Безопасные заголовки $headers = "From: noreply@yourdomain.com\r\n"; $headers .= "Reply-To: " . filter_var($youremail, FILTER_SANITIZE_EMAIL) . "\r\n"; $headers .= "Content-Type: text/plain; charset=UTF-8\r\n"; $headers .= "X-Mailer: PHP/" . phpversion(); // Отправка письма if (mail($to, $subject, $message, $headers)) { $success_message = $contact_submitted; // Очистка полей после успешной отправки $yourname = ''; $youremail = ''; $yourmessage = ''; // Записываем время отправки для rate limiting $_SESSION['form_submissions'][] = $current_time; // Генерируем новый CSRF токен $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } else { $error_message = 'Failed to send email. Please try again later.'; } } else { $error_message = 'Please enter your name, a valid email address, your message and the correct answer to the maths question.'; } } } // Генерация новой капчи $number_1 = random_int(1, 9); $number_2 = random_int(1, 9); $_SESSION['captcha_answer'] = $number_1 + $number_2; // Вывод сообщений if (!empty($error_message)) { echo '' . htmlspecialchars($error_message, ENT_QUOTES, 'UTF-8') . '
'; } if (!empty($success_message)) { echo '' . htmlspecialchars($success_message, ENT_QUOTES, 'UTF-8') . '
'; } ?>

