Получение запутанного спама, который не должен быть возможен из-за требований антиспама и форм, которые у меня есть, поэтому мне нужна помощь в определении того, как атаковать этого конкретного бота.
У меня есть простая форма для связи со мной на моем веб-сайте, которая использует PHP для отправки мне электронного письма. Он запускается через PHP. Примерно 3 раза в день я получаю электронное письмо, в котором форма заполняется буквой «1», например «Имя: 1», «Электронная почта: 1», «Сообщение»: 1. У меня есть формат электронной почты, необходимый для моего поля (требующий @ what.com ), У меня есть капча И у меня установлена приманка, но я получаю эти письма.
Моя форма и код с картинки:
<form method="post" action="contact.php">
<label class="contenttext">Your Name:</label>
<input name="senderName" class="inputemail" required="required"><br/><br/>
<label class="contenttext">Your Email Address:</label>
<input name="senderEmail" class="inputemail" type="email" required="required"><br/><br/>
<!-- HONEYPOT --><input type="text" id="catcher" name="catcher"/>
<textarea name="message" required="required"></textarea><br/><br/>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<div class="g-recaptcha" data-sitekey="(mysitekey)"></div>
<br/>
<div class="capfail" id="capfail">Please check the Captcha box.</div><br/>
<script>
$("form").submit(function(event) {
var recaptcha = $("#g-recaptcha-response").val();
if (recaptcha === "") {
event.preventDefault();
$("#capfail").show();
}
});
</script>
И мой код PHP:
<?php
$webmaster_email = "myemail@gmail.com";
$feedback_page = "contact.html";
$error_page = "404.shtml";
$thankyou_page = "contactsuccess.html";
$senderEmail = $_REQUEST['senderEmail'] ;
$message = $_REQUEST['message'] ;
$senderName = $_REQUEST['senderName'] ;
$msg =
"First Name: " . $senderName . "\r\n" .
"Email: " . $senderEmail . "\r\n" .
"\r\n" . "Message: " . "\r\n" . $message ;
function isInjected($str) {
$injections = array('(\n+)',
'(\r+)',
'(\t+)',
'(%0A+)',
'(%0D+)',
'(%08+)',
'(%09+)'
);
$inject = join('|', $injections);
$inject = "/$inject/i";
if(preg_match($inject,$str)) {
return true;
}
else {
return false;
}
}
if (!isset($_REQUEST['senderEmail'])) {
header( "Location: $feedback_page" );
}
elseif (empty($senderName) || empty($senderEmail)) {
header( "Location: $error_page" );
}
elseif ( isInjected($senderEmail) || isInjected($senderName) || isInjected($message) ) {
header( "Location: $error_page" );
}
elseif(!empty($_POST['catcher'])) {
header( "Location: $error_page" );
}
else {
mail( "$webmaster_email", "Feedback Form Results", $msg );
header( "Location: $thankyou_page" );
}
?>
Это должно эффективно блокировать автоматическое заполнение ботов приманкой, проверять, является ли кто-то человеком с капчей, и требовать, чтобы поля соответствовали определенному формату. Есть ли что-то еще, что я пропускаю, или кто-нибудь может помочь мне понять, как я все еще буду получать подобные письма?
UPDATE:
Было отмечено, что я не использую проверку на стороне сервера. Я могу настроить серверную часть, но это нарушает мой код div / show в моей HTML-форме. Есть ли способ отправить форму, прямо в файл PHP, проверить PHP, проверена ли капча, и если нет, вернуть пользователя в файл HTML (в идеале, если форма еще заполнена, чтобы ничего не потеряно), и отобразите маленькую надпись «Пожалуйста, отметьте поле с картинкой». сообщение, как я сейчас настроил?