Привет! Через форму обратной связи шлется спам. Причем каким-то образом он обходит проверку данных формы на стороне сервера в php. вручную имитировал такие же запросы - проверку не проходит, все ок. а вот спам-боты как-то проходят.
Вот пример спам письма: заметьте бот умудряется отправлять пустые названия полей!
Вот пример тестового письма:
Обработчик формы:
<?php
require_once(dirname(__FILE__).'/class.phpmailer.php');
$method = $_SERVER['REQUEST_METHOD'];
$message = '';
$email = new PHPMailer();
$c = true;
//$secret = htmlspecialchars(trim($_POST["secret_field"]));
//$honeypot = htmlspecialchars(trim($_POST["firstname"]));
if($_FILES['upfile']['name'] != ""){
for($i=0; $i < count($_FILES['upfile']['name']); $i++){
$name_of_uploaded_file = basename($_FILES['upfile']['name'][$i]);
$file_to_attach = $_FILES["upfile"]["tmp_name"][$i];
$email->AddAttachment($file_to_attach, $name_of_uploaded_file);
}
}
$project_name = trim($_POST["project_name"]);
$admin_email = trim($_POST["admin_email"]);
$form_subject = trim($_POST["form_subject"]);
# spam filter: устанавливаем переменную
$no_spam = true;
#
foreach ( $_POST as $key => $value ) {
$key = empty($key) ? 'x' : $key;
# spam filter: проверяем поле ввода на спам по признакам в массиве. обновляем переменную если есть спам.
if($key == 'Комментарий' or $key == 'x' ){
$no_spam = ($value == str_replace(array( 'WhatsApp', 'whatsapp', 'http://', 'https://', 'www.', '.ru', '.com', '[url', '<a ', ' seo ' ),'',$value));
}
#
if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" && $key != "consent" ) {
$message .= "
" . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
<td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
<td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
</tr>
";
}
}
$message = "<table style='width: 100%;'>$message</table>";
function adopt($text) {
return '=?UTF-8?B?'.base64_encode($text).'?=';
}
$headers = "MIME-Version: 1.0" . PHP_EOL .
"Content-Type: text/html; charset=utf-8" . PHP_EOL .
'From: '.adopt($project_name).' <info@'.$_SERVER['HTTP_HOST'].'>' . PHP_EOL .
'Reply-To: '.$admin_email.'' . PHP_EOL;
$email->CharSet = "utf-8";
$email->From = 'info@domain.ru';
$email->FromName = $project_name;
$email->Subject = $form_subject;
$email->isHTML(true);
$email->Body = $message;
$email->AddAddress( $admin_email );
$email->AddAddress( 'alexdio85@domain.ru' );
# spam filter: отсылаем заявку на почту если спама нет
if($no_spam) $email->Send();
#
Помогите понять как такое возможно. И какие варианты решений есть? На вскидку есть несколько мыслей, но время не хочется терять. wordpress. Обычный хостинг regru. есть такая же проблема и похожий спам-бот на timeweb и Битриксе. Спасибо!