ฉันใช้แบ็กเอนด์ของ 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';
$names = $mails = [];
ถ้า (is_array (ชื่อ $)) {
foreach ($name as $n) $names[] = urlencode($n);
} อื่น {
$names[] = urlencode($ชื่อ);
}
ถ้า (is_array($email)) {
foreach ($email as $n) $mails[] = md5($n);
} อื่น {
$mails[] = md5($อีเมล);
}
$postdata = [
'form_params' => [
'ชื่อผู้ใช้' => $ชื่อ,
'emailhash' => $mail,
'ไอพี' => $ไอพี
"แบดโทเรซิท",
"เจสัน",
"ยูนิกซ์"
]
'ส่วนหัว' => [
'ยอมรับ' => 'แอปพลิเคชัน/json',
]
];
พยายาม {
$response = $client->post($endpoint, $postdata);
$response_data = json_decode((สตริง) $response->getBody(), TRUE);
} จับ (\ข้อยกเว้น $e) {
$response_data = [];
$response_data['สำเร็จ'] = 0;
Drupal::logger('asdentbase')->error('stopforumspam exception '.$e->getMessage());
}
$ความมั่นใจ = 0.0;
$conficount = 0;
$confimax = 0;
array_walk_recursive($response_data, function ($v, $k) use (&$confidence, &$conficount, &$confimax) {
ถ้า ($k == 'ความมั่นใจ') {
$ความมั่นใจ += $v;
ถ้า ($v > $confimax) $confimax = $v;
}
ถ้า ($k == 'ค่า') {
$conficount++;
}
});
$sumconfi = $conficount == 0 ? 0.0 : $confidence / $conficount;
ถ้า ($confimax > 80) {
ถ้า ($sumconfi < $confimax) $sumconfi = $confimax;
}
ส่งคืน $sumconfi;
}