Защита сайта от спама на jQuery
После написания темы Считаем количество кликов, пришла идея о том, как можно защитить сайт от спама при помощи подсчета кликов на jQuery.
Принцип такой защиты довольно прост. Изначально на сайте располагается форма, в атрибуте action которой мы указываем ссылку на страничку с сообщением, что проверка не пройдена. Внизу сайта располагается наш скрипт, который считает и проверяет количество кликов по заранее указанному элементу. В случае совпадения (или превышения) необходимого количества кликов, скрипт заменяет в форме значение атрибута action на нужный URL-адрес, где и будут обработаны отправленные данные.
Ниже расположен рабочий пример формы, которая, пока Вы не кликните пять раз по блоку DIV с надписью: "Кликните здесь 5 раз", будет перенаправлять Вас на страничку 404.php при попытке отправления данных формы.
Кликов - 0
Если Вы кликните пять или более раз по блоку DIV с надписью "Кликните здесь 5 раз", то скрипт автоматически заменит значение URL у атрибута action указанной формы на нужный (в нашем случае страничка просто перезагрузится).
Следует учесть тот факт, что многие боты игнорируют JavaScript код, и потому они сразу отпадают. Другие боты, даже если и загружают JavaScript код, то это им мало что даст, т.к. они не поймут, что нужно сделать для того, чтобы произошла замена URL-адреса на нужный. А без человеческого вмешательства вряд ли догадаются, в чем подвох.
Как Вы уже могли догадаться из названия темы, для работы нам потребуется подключить библиотеку jQuery. Делается это так:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js">
</script>
Давайте теперь рассмотрим этот чудо код, который поможет нам запутать ботов спамеров:
<script type="text/javascript">
$(document).ready(function(){
$("#no_spam")
.data("counter", 0) // Обнуляем счетчик кликов
.click(function() {
var counter = $(this).data("counter"); // Получаем значение
$(this).data("counter", counter + 1); // Увеличиваем значение на 1
if ($(this).data("counter")<6) $("#col_click").text($(this).data("counter"));
// Если кликнули 5 или более раз,
// то перенаправляем на страничку обработки отправленной формы
if ($(this).data("counter")>=5) {
$("#col_click").text = $(this).data("counter");
$("#send_form").attr("action","forms_protection_jQuery.php")
};
});
});
</script>
Сама форма для отправки сообщений в нашем случае выглядит так:
<div style="width: 200px; margin: 0 auto; text-align: center;">
Защита от спама
<div id="no_spam" style="border: 1px solid #e4e4e4; cursor: pointer;">
Кликните здесь 5 раз<br>
Кликов - <span id="col_click">0</span>
</div>
</div>
<br>
<form id="send_form" method="POST" action="404.php">
<table style="margin: 0 auto;">
<tr><td>Имя: </td><td><input type="text" name="name"></td></tr>
<tr><td>Отчество: </td><td><input type="text" name="patronymic"></td></tr>
<tr><td>Фамилия: </td><td><input type="text" name="family"></td></tr>
<tr><td></td><td><input type="submit" name="send_form" value="Отправить"></td></tr>
</table>
</form>
В случае если попадется умный бот, который найдет URL, на который мы подменяем в случае выполнения условия, то всегда можно разбить URL на несколько частей и потом склеивать обратно, чтобы в коде странички не было URL целиком.
В том случае если спам стал проходить, то рекомендуем Вам сменить имя файла обработки поступающих данных формы и URL в скрипте соответственно тоже, т.к. его могли вычислить и прописать боту напрямую.
Данный скрипт можно развивать путем добавления новых условий. Например, сделать несколько цветных фигур, и попросить пользователя кликнуть три раза по зеленым и два раза по красным фигурам, при этом проверять, чтобы другие счетчики были на нуле.
?https://pedant-vladimir.ru/remont-iphone-6-6plus/zamena-displeya
Перед публикацией все комментарии проходят обязательную модерацию!
Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
Решения проблемы в данном случае два:
1) Переместить JavaScript код под форму.
2) Разместить JavaScript код внутри $(document).ready(function(){ });
P.S. Тему чуть-чуть подправили в соответствии со вторым решением проблемы.
P.S. Я нашёл проблему. Вы забыли добавить, что нужен ещё один файлик - это jquery.js, без него ничего не работает. Вот его то я и скачал, сохранив всю страницу целиком. И теперь всё работает отлично. Кстати, JavaScript код можно располагать на странице где угодно, работает и так, и так.
Выложите эту тему для народа где-нибудь отдельно.
Об этом уже есть тема на нашем сайте - Скрытие JavaScript путем обфускации.