JComments – это один из самых лучших и наиболее популярных на сегодняшний день компонентов комментариев для CMS Joomla! Он достаточно прост в использовании и имеет много полезных настроек. Единственным минусом компонента JComments можно считать его подверженность спам-атакам.
Сегодня я расскажу основные способы борьбы со спамом в JComments, которые помогут вам ограничить свой сайт от нежелательных комментариев.
Настройка CAPTCHA - reCAPTCHA в JComments
В JComments есть встроенная капча, но многие специалисты предпочитают вместо неё использовать более надёжную защиту веб-сайтов от ботов, которую предоставляет Google.
О том как включить и настроить CAPTCHA в Joomla, я уже рассказывал в статье «Настройка CAPTCHA в Joomla». Поэтому повторяться нет никакого смысла. Перейдите по вышеуказанной ссылке и сделайте всё как я описал в том уроке.
Далее, чтобы включить CAPTCHA в JComments, вам нужно перейти в настройки этого компонента (Компоненты → JComments → Настройки). В настройках открыть вкладку «Вид» и убедится в том, что в поле CAPTCHA у вас активировано «CAPTCHA - reCAPTCHA (Joomla)». Если нет, то выберите этот пункт из списка и сохраните настройки.

Далее необходимо перейти на вкладку «Права» и отметить галочкой пункт «Защита от спамботов (CAPTCHA)» для нужных групп пользователей: Public, Guest, Manager, Administrator, Registered, Author, Editor, Publisher, Super Users. Не забудьте нажать на кнопку «Сохранить», чтобы изменения вступили в силу.

Если вы всё сделали правильно, то на сайте, под формой комментариев появится форма капчи, которая будет препятствовать ботам оставлять комментарии на вашем сайте.

Запрет ссылок в комментариях
Даже если подключить к JComments надёжную капчу, то всё равно найдутся такие хакеры-специалисты, которые найдут способ обойти эту защиту. В результате, вы всё равно, время от времени, будете получать на страницах сайта комментарии со спамом разного вида. И чем более популярным будет ваш сайт, тем больше будет желающих разместить в комментариях спам.
В таком случае, единственным на сегодняшний день решением является внесение изменений в код компонента JComments, что позволит блокировать ссылки и другие нежелательные слова в комментариях.
Правки вносятся в файл:
/components/jcomments/jcomments.php
В нём нужно найти:
if (isset($_REQUEST['jtxf'])) {
require_once(JCOMMENTS_SITE . '/jcomments.ajax.php');
И заменить эти две строки кода на:
if (isset($_REQUEST['jtxf'])) {
$mystring = JRequest::getVar('comment', '', 'post', 'string');
if (preg_match("/(http|https)/i", $mystring)) {echo "OK"; exit;}
require_once (JCOMMENTS_BASE.'/jcomments.ajax.php');
В результате, если в комментарии будет найдено http, или https, то он не будет опубликован. Поиск, как вы уже наверное поняли, происходит с помощью регулярного выражения. В него вы можете добавить и любые другие слова, при наличии которых в тексте, публикация комментария будет блокироваться.
