#html #forms #filter #spam
#HTML #формы #Фильтр #спам
Вопрос:
У меня есть простой фильтр нежелательной почты (для предотвращения отправки формы нежелательной почты), настроенный на веб-сайте путем генерации случайного числа и ввода его пользователем. По какой-то причине спам все еще может проходить, даже не вводя случайное число. У кого-нибудь есть идеи относительно того, как это могло произойти?
Вот код:
var randomnumber=Math.floor(Math.random()*1001);
var isNumberEnteredCorrect = false;
var whatevertheyentered;
function checkUserInput(whatevertheyentered){
if(whatevertheyentered == randomnumber){
return true;
}
else {
return false;
}
}
function validateForm()
{
var x = document.forms["myForm"]["random_number"].value;
if(x == randomnumber){
return true;
}
else{
alert("The number you've entered is incorrect.");
return false;
}
}
Пользователь отправляет форму, нажимая эту кнопку:
<input name="Submit" type="submit" class="button" value="Send Message" />
Комментарии:
1. Почему
else
закомментировано вvalidateForm()
?2. Извините, это не прокомментировано, я просто скопировал это неправильно.
3. Пользователи могут отключить javascript. Таким образом, они могут обойти этот спам-фильтр.
Ответ №1:
Один из вариантов, почему спам-боты попадают в ловушку, заключается в том, что они не используют JavaScript и напрямую отправляют форму.
Однако одним из вариантов является асинхронная отправка формы с помощью AJAX. Это, вероятно, спасет вас от некоторых ботов (и пользователей, у которых отключен JavaScript).
Я не знаю, как работает внутренняя логика спам-ботов, но я предполагаю, что бот ищет тег «форма» и пытается опубликовать содержимое формы в параметре действия формы. В этом случае может помочь «кодирование разделенной строки» параметра формы действия и отправка формы AJAX.
Однако имейте в виду, что этот трюк сработает, только если ваш сайт не является основной целью для ботов.
Ответ №2:
Я не вижу никаких непосредственных ошибок с вашим javascript, однако любой пользователь может отключить javascript в своем браузере, чтобы эти функции не выполнялись. Из-за этого вы не должны полагаться только на javascript для проверки формы. Резервное копирование с помощью серверного языка, такого как PHP, намного безопаснее.
Комментарии:
1. Проблема в том, что у меня нет PHP на моем сервере, который находится вне моего контроля, потому что он принадлежит моему работодателю. Есть ли какие-либо другие методы защиты от нежелательной почты, которые я мог бы использовать, которые не используют PHP?
2. @user: Конечно, если они используют ASP.net . Или если они используют, я не знаю, Perl. Но вам нужен какой-то серверный код. Все, что находится на стороне клиента, может быть подделано, отключено или иным образом обойти.
Ответ №3:
Выполните проверку на стороне сервера с помощью PHP / ASP.NET / ColdFusion или чего-либо еще, что вы используете. НИКОГДА не полагайтесь полностью на проверку на стороне клиента, она наиболее подвержена взлому и злоупотреблениям.
Как только форма заполнена, значения должны быть отправлены, скажем, в review.php страница, на которой вы проверяете, что значение было тем, которое вы ожидали. Если все правильно, продолжайте нормально, иначе завершите выполнение кода формы / отправки и перенаправьте пользователей на страницу ошибок.
Комментарии:
1. Просто дайте нам знать, к каким «языкам» у вас есть доступ
Ответ №4:
Вы могли бы использовать Javascript для отправки формы таким образом, если у бота отключен JS, он не сможет отправить форму.