Борьба со спамов в PHPFOX 3

15:26 20.09.2017
Почти сразу после установки движка phpFOX, меня одолели спам боты. В день было по 25 - 40 регистраций и спам записей в блоге. Не помогает даже reCaptcha...

Побродив по Админ панели, нашел небольшой раздел: Анти Спам Вопрос (Админ панель > Модули > Пользователь > Анти Спам Вопрос), который выводит в форму регистрации простые вопросы, на которые должен ответить пользователь, если ответ был дан не верно, скрипт выдаст ошибку. Я написал несколько не сложных вопросов, на которые может ответить даже первоклассник, например: три + один, все знают, что правильный ответ четыре. А вот спам боты этого не знает, ну а если знают, то не все, по этому ему зарегистрироваться гораздо сложнее.

После написания вопросов, пока еще не было ни одного спама. Я даже отключил reCaptcha, так как боты обходят её как за здрасте, а простым пользователям порой очень надоедает вводить исковерканные буквы, по нескольку раз. Получается reCaptcha бесполезна, а вот банальные вопросы спасают от лишней работы - очистки проекта от грязи.
13:57 10.01.2018
Я уже давно отключил вопросы, так как мне и это показалось лишней тратой времени пользователей. Я сделал невидимое поле и проверяю его - заполнено оно или нет, если поле заполнено, значит останавливаю сценарий, так как невидимо поле заполняет только бот, реальный человек его не видит (пока не полезет в исходный код страницы). Долгое время это помогало, но вдруг появилось одно недоразумение, которое регистрировалось с электронной почты "чето_там@163.com" и отправляло спам статусы, статьи, темы и так далее. Удалишь пользователя со всеми записями, на следующий день снова появится.

Я решил ограничить регистрацию с этой почты (вдруг поможет!). Думаю в движке имеется какой нибудь список запрещенных электронных почт, как, например, Email White List (Белый список электронной почты) (местонахождение: Менеджер настроек > Core), но если честно, я не разобрался для чего он там нужен. Я сделал на скорую руку такую затычку: в файле: module/user/include/component/controller/register.class.php, после:
		$oValid = Phpfox::getLib('validator')->set(array('sFormName' => 'js_form', 'aParams' => Phpfox::getService('user.register')->getValidation()));
		if ($aVals = $this->request()->getArray('val'))
		{

Добавил:
			if (!empty($aVals['email']) && strpos($aVals['email'], '@') !== false)
			{
				$piece = explode('@', $aVals['email']);
				if ($piece[1] == '163.com')
				{
					exit;
				}
			}

Посмотрим, как теперь будет пролазить недоразумение к нам на сайт.

Конечно, было бы удобнее сделать отдельное поле для ввода почтовых сервисов, но пока так...
В скором будущем я переделаю всю эту конструкцию.