Я использую бэкенд https://www.stopforumspam.com/ вместе с honeypot очень успешно. Но вы должны проверить, соответствуют ли показатели SFS вашему профилю риска пользователя.
Не уверен, есть ли модуль, но вот мой код, если вы хотите скопировать вставку и поиграть с ним...
/**
* @param $ip - ip или ip[]
* @param $name - имя или имя[]
* @param $email - mailadr или mailadr[]
*
* @return float|int — средняя достоверность спама на сайте api.stopforumspam.org.
*/
общедоступная статическая функция checkStopForumSpam($ip, $name, $email) {
$client = Drupal::getContainer()->get('http_client');
$endpoint = 'https://api.stopforumspam.org/api';
$ имена = $ почты = [];
если (is_array($имя)) {
foreach ($name as $n) $names[] = urlencode($n);
} еще {
$names[] = urlencode($name);
}
если (is_array($email)) {
foreach ($email как $n) $mails[] = md5($n);
} еще {
$mails[] = md5($email);
}
$постданные = [
'form_params' => [
'имя пользователя' => $имя,
'emailhash' => $mails,
'ip' => $ip,
"бадторексит",
"джсон",
"юникс"
],
'заголовки' => [
'Принять' => 'приложение/json',
]
];
пытаться {
$response = $client->post($endpoint, $postdata);
$response_data = json_decode((string) $response->getBody(), TRUE);
} поймать (\Exception $e) {
$response_data = [];
$response_data['успех'] = 0;
Drupal::logger('asdentbase')->error('stopforumspam exception '.$e->getMessage());
}
$ уверенность = 0,0;
$конфисчет = 0;
$конфимакс = 0;
array_walk_recursive($response_data, функция ($v, $k) use (&$confidence, &$conficount, &$confimax) {
если ($k == 'уверенность') {
$уверенность += $v;
если ($v > $confimax) $confimax = $v;
}
если ($k == 'значение') {
$конфисчет++;
}
});
$sumconfi = $conficount == 0 ? 0.0 : $confidence / $conficount;
если ($confimax > 80) {
если ($sumconfi < $confimax) $sumconfi = $confimax;
}
вернуть $sumconfi;
}