Рега с подтверждением e-mail и дальнейшей активацией администратором.
Плюс при регистрации дополнительное поле сделать обязательно с вопросом и добавить последнюю версию рекаптчи 3.
Перед активацией нового юзера, идём на stopforumspam.com/search и cleantalk.org/ru/blacklists, пробиваем e-mail и ip на предмет спама
Так же на whois.nic.ru можно посмотреть принадлежность ip к разным хостерам, если там выдаст какой нибудь Hetzner, OVH или прочих хостеров, можно сразу банить всю маску
В итоге спамер улетает в баню, даже не успев ничего написать и это их неплохо обламывает.
Для бана в файле .htaccess добавляем типа такого
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^CN$ [NC]
RewriteRule ^(.*)$ - [F]
RewriteRule \.(js|css|jpeg|jpg|gif|png|ico|map)(\?|$) /404error.php [L,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
ErrorDocument 403 /index.htm
deny from 51.0.0.0/8
deny from 80.91.184.0/21
deny from 91.202.131.63
deny from 118.174.233.41
deny from 176.104.184.0/24
deny from 178.212.96.0/21
deny from 178.162.192.0/18
deny from 198.16.66.0/23
deny from 198.16.70.0/23
deny from 198.16.78.0/23
index.htm - это страница, которую видит забаненный, там можно написать что угодно. Например - проект закрыт, всем спасибо за внимание