Eu folosesc backend-ul lui https://www.stopforumspam.com/ împreună cu honeypot foarte reușit. Dar trebuie să verificați dacă valorile SFS se potrivesc cu profilul dvs. de risc de utilizator.
Nu sunt sigur dacă există un modul, dar iată codul meu dacă doriți să copiați și să vă jucați cu el...
/**
* @param $ip - ip sau ip[]
* @param $nume - nume sau nume[]
* @param $email - mailadr sau mailadr[]
*
* @return float|int - încrederea medie în spam a api.stopforumspam.org
*/
funcție publică statică checkStopForumSpam($ip, $nume, $email) {
$client = Drupal::getContainer()->get('http_client');
$endpoint = 'https://api.stopforumspam.org/api';
$nume = $mails = [];
dacă (este_matrice($nume)) {
foreach ($nume ca $n) $nume[] = urlencode($n);
} altfel {
$nume[] = urlencode($nume);
}
dacă (este_matrice($email)) {
foreach ($email ca $n) $mails[] = md5($n);
} altfel {
$mails[] = md5($email);
}
$postdate = [
'form_params' => [
'username' => $nume,
'emailhash' => $mails,
'ip' => $ip,
"badtorexit",
"json",
"unix"
],
'headers' => [
„Accept” => „aplicație/json”,
]
];
încerca {
$răspuns = $client->post($endpoint, $postdate);
$response_data = json_decode((string) $response->getBody(), TRUE);
} captură (\Excepție $e) {
$response_data = [];
$response_data['succes'] = 0;
Drupal::logger('asdentbase')->error('stopforumspam exception '.$e->getMessage());
}
$incredere = 0,0;
$conficount = 0;
$confimax = 0;
array_walk_recursive($response_data, function ($v, $k) use (&$confidence, &$conficount, &$confimax) {
dacă ($k == 'încredere') {
$incredere += $v;
dacă ($v > $confimax) $confimax = $v;
}
dacă ($k == „valoare”) {
$conficount++;
}
});
$sumconfi = $conficount == 0 ? 0.0 : $incredere / $conficount;
dacă ($confimax > 80) {
if ($sumconfi < $confimax) $sumconfi = $confimax;
}
returneaza $sumconfi;
}