Ловушка для спам-ботов — Запрещаем спам комментарии
Если не хочешь читать лирическое отступление и желаешь сразу приступить к делу, жми сюда.
После того как я запретил ссылки в комментраиях Jcomments, и написал об этом пост, спамных комментов стало значительно меньше. Но они были. Далее я запретил английские буквы, но все равно спам продолжался. Кроме того, как было верно замечено в одном комменте - не проставлялись смайлики, т.к. у некоторых из них обозначение из цифр и букв английского алфавита. Потом, что бы отсечь спам я стал вносить в спам-лист части слов, в основном коммерческой и эро тематики:
(http|https|дедик|красот|трах|лесби
|купи|скач|проститу|казин|мойк|юрист
|ремонт|комерч|прикол|порно|видео
|ролик|анал|секс|хими|цена|кардинг
|маркет|заказ|закаж|курсы|букмек|услуг)
Но этот список стоп-слов мог разрастить до огромных размеров.
Спямят не ручками, а с помощью специальных программ. В этом не трудно убедиться сделав поля для ввода Имени, Е-Мейла и Сайта - невидимыми для людей.
Боты заполняют все возможные поля и проставляют все галочки. Определяют где что ставить, ориентируясь на атрибут name в формах. Ники у ботов, все на английском языке, так они рекламируют бренд какой ни будь фирмы или продукта.
Было бы конечно идеально создать поле в которое, если бы ставилась галка, то бот отсылался по известному нам адресу.
Как это сделать в Джумле я незнаю .
Поэтому я решил использовать поле Е-Мейл в которое нужно поставить русские буквы, и больше ничего. Только при этом условии, комментарий будет записан Джумлой и отправлен на модерацию.
Итак приступим:
Используем поле «Е-Мейл» вместо поля «Имя»,
Запрещаем любые символы и буквы, кроме русских
1.Включите поле Е-Мейл и сделайте, его для гостей обязательным. Все другие поля, что бы пока не мешались отключите.
2.Найдите эти строки в файле jcomments.php
который находиться в
/components/com_jcomments
// regular expression for links DEFINE('_JC_REGEXP_LINK', '#(^|\s|\>|\()((http://|https://|news://|ftp://|www.)\w+[^\s\<\>\"\'\)]+)#iu'); DEFINE('_JC_REGEXP_EMAIL', '#([\w\.\-]+)@(\w+[\w\.\-]*\.\w{2,4})#iu'); DEFINE('_JC_REGEXP_EMAIL2', '#^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$#iu');
3.Аккуратно заменить регулярное выражение в строке _JC_REGEXP_EMAIL2
на
([А-Яа-яЁё]+) - Это русские буквы, большие и маленькие. Только они будут разрешены в этом поле. Никаких точек, собак и пробелов. Потом можете поиграться с другими регулярками, добавить цифры, пробелы итд. Что такое плюсик - ХЗ, но без него не работает))
(Рекомендую: Предварительно, закомментировать строчку которую будете править, что бы была возможность откатить, если что то пойдет не так.)
4.Сохраните и проверьте все ли работает, написав в поле Е-Мейл русскими буквами. Так же проверьте, что с другими символами коммент не проходит и выводиться предупрежение.
Собственно все. Идея понятна.
Теперь нужно переименовать все Надписи и Предупреждения.
Я не стал заморачиваться с перенаправлениями и пр., и тупо в файле прописал
5.Закомментируйте код php и напишите что нужно в файле tpl_form.php, который лежит по адресу:
/components/com_jcomments/tpl/default
<span> <input id="comments-form-email" type="text" name="email" value="" size="22" tabindex="3" /> <label for="comments-form-email">Ваше имя<?php// echo $text; ?></label> </span>
6.Замените надпись в предупреждении - «Пожалуйста, введите корректный e-mail!» на «Пожалуйста, введите Ваше имя на русском!»
У меня это 153 строка
ERROR_INCORRECT_EMAIL="Пожалуйста, введите корректный e-mail!"
Редактируйте в языковом файле: ru-RU.com_jcomments.ini. Который находиться здесь:
/language/ru-RU
P.S Если вам обязательно нужно что бы пользователь оставлял свой е-мейл, то пусть пишет его в поле Имя, там прокатывают большинство символов. И таким же макаром преименуйте надписи к нему.
А для зарегистрированных пользователей ничего не меняется.
Добавить комментарий

Оставить коммент со ссылкой бесплатно можно здесь
Комментарии