Я использую бэкенд 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;
  }