Итак. Сначала создаем табличку. Если кто не в курсе, то в Evolution есть возможность производить запросы из админки, для этого идем по цепочке: Инструменты -> Резервное копирование -> Восстановить -> Выполнить произвольную команду SQL.
Вставляем — выполняем. (префикс здесь не важен, но можете поменять на свой).
CREATE TABLE IF NOT EXISTS `modx_ip_blocked` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(16) NOT NULL,
`blocked` tinyint(4) NOT NULL,
`when` varchar(18) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
UNIQUE KEY `ip` (`ip`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
После этого идем в плагины и созадем плагинчик на 'OnBeforeLoadDocumentObject' и 'OnLoadWebPageCache'.
//<?php
$e = $modx->Event;
$ip = $_SERVER["REMOTE_ADDR"];
$tbl = $modx->getFullTableName('ip_blocked');
if ($modx->db->getValue("Select count(*) from $tbl where `ip`='$ip'")==1)
{
exit('С вашего IP производилась попытка отправки спама. Ваш адрес занесен в черный список. From your IP was trying to send spam. Your address is listed in Carini list.');
}
if ($e->name == 'OnBeforeLoadDocumentObject' || $e->name == 'OnLoadWebPageCache')
{
if ($_POST['validate'])
{
if ((!preg_match('/[а-яА-Я]{1,}/', $_POST[$_POST[validate]])) or (!isset($_POST[$_POST[validate]])))
{
$modx->db->insert(array('ip'=>$ip,'blocked'=>1,'when'=>time()),$tbl);
exit('Ваше сообщение подозрительно похоже на спам. Поэтому его отправка была отклонена, а ваш IP занесен в черный список. Your message sounds suspiciously like spam. Therefore, his submission was rejected and your IP blacklisted.');
}
}
}
Ну а теперь для того, чтобы указать какое именно поле проверять вставляем в форму скрытый инпут с именем validate и значением в виде имени проверяемого поля. Допусти, если мы хотим проверять по полю message, то вставляем такую строчку в форму.
<input type="text" name="validate" value="message" style="display:none;"/>
Обратите внимание: не type=«hidden», а style=«display:none;». Это связано с тем, что eForm не любит скрытые поля кроме идентификатора формы.
Игорь Сухинин 08.08.2016 11:14 #
P.S.: английский перевод ужасен.
Алексей Либер 08.08.2016 11:31 #
Игорь Сухинин 08.08.2016 11:43 #
Лучше не писать ничего на другом языке, чем писать так. Для иностранца и так весь сайт не будет на английском — он его целиком будет переводить в Google Translate, если уж на то пошло. И тогда он будет гораздо более лоялен к автоматическим ошибкам. Так что, IMHO, не имеет смысла сюда впихивать кривой английский язык.
>> Рекаптча2 — хорошее решение
Относительно Вашего — это не хорошее, а на порядки лучшее решение. Ничего личного, но это просто факт.
>> но требует определенных манипуляций…
Да какие там манипуляции, я Вас умоляю :) Тем не менее, было бы гораздо полезнее, если бы Вы описали как раз эти манипуляции, чем предоставили заведомо плохое решение для блокировки спама. Что свое — это похвально. Но, к сожалению, оно плохое. Гораздо хуже существующих аналогов.
Я бы еще понял, ну если бы Вы предложили, скажем, подключить стороннюю библиотеку от Akismet (вроде у них же есть public API?). Но хотя что там, проверка элементарно делается. Тем не менее, для многих и это было бы откровением :) Но вот проверять так, как делаете Вы… Это слишком примитивная проверка, которая достаточно легко обходится спамерами.
Алексей Либер 08.08.2016 11:50 #
Игорь Сухинин 08.08.2016 12:03 #
P.S.: Что касается моего кода… дорогой друг, Вы находитесь на modx.ru, который был написан отчасти и мной или под моим надзором. Кажется, этот продукт полезен сообществу MODX. Хочется надеяться, что это так :)
Алексей Либер 08.08.2016 12:06 #
Игорь Сухинин 08.08.2016 12:33 #
Алексей Либер 08.08.2016 12:36 #
Dmi3yy 08.08.2016 16:48 #
Алексей Либер 08.08.2016 16:52 #