Problème de spam avec formulaire_ecrire_auteur

Bonjour,
J’ai de nouveau comparé mon site avec le zip de la 426, tout est identique.
J’utilise uniquement les plugins fournis en standard dont les plugins Facteur 5.0.5 et NoSpam 2.4.4 pour envoyer les mails via la fonction mail de PHP.
Le seul PHP que j’ai modifié était celui de ecrire_auteur, j’avais ajouté un champ. Je l’ai désactivé. Je suis donc complètement en standard, aucun php de ma main, aucun formulaire et mes pages html sont en spip tout ce qu’il y a de plus classique.
Et après retour à la page ecrire_auteur de base, c’est toujours la même chose, ils passent toujours par ce formulaire.

Bonjour
Et que disent les log de nospam ?
« nospam.log » dans tmp/log.

Bonjour, pas grand chose dans ces logs

nospam_suspects.log, 1 seule ligne

2023-12-18 09:05:38 91.107.194.105 (pid 27868) :Pub:!INFO: Suspect SPAMMEUR (_nospam_encrypt) UA:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 POST:{« page »:« login »,« url »:« spip.php »,« lang »:« fr »,« formulaire_action »:« login »,« formulaire_action_args »:« GIhJ3kNwSAkaUYh5a+KBOmNO1RJGoDEj46YUXgf9ZEFTGxJUld9W46zoTl2JkONvuEZ2oYpZ2oTU0Ml/Ob430aIk4gzuNzl+b/cEY8zEEunm1PlAvl79elI= »,« formulaire_action_sign »:"",« var_login »:« Sunworld »,« password »:« tklv1l5$T5O »,« submit »:« Se connecter »}

nospam.log (j’ai bidouillé les emails pour éviter les erreurs de clics

2023-12-16 18:27:27 149.88.19.5 (pid 9142) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: reddfgsdf@ hotmail .com
2023-12-16 19:18:24 103.188.244.181 (pid 13419) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: yourmail@ gmail .com
2023-12-16 20:19:09 93.124.38.252 (pid 17406) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: vova80918@ mail .ru
2023-12-16 21:50:03 104.168.153.70 (pid 23562) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: -1648
2023-12-16 22:54:55 196.244.48.28 (pid 28900) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: -1648
2023-12-17 03:52:48 193.37.33.45 (pid 22626) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: -1648
2023-12-17 06:51:20 5.35.33.3 (pid 3132) :Pub:!INFO: SPAM_ENCRYPT_NAME active mais _nospam_encrypt manquant sur formulaire login
2023-12-17 06:51:20 5.35.33.3 (pid 3132) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: mr.bumbaster81@ gmail .com
2023-12-17 11:10:59 196.242.84.154 (pid 21567) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: -1648
2023-12-17 12:29:00 103.188.244.182 (pid 26818) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: yourmail@ gmail .com
2023-12-17 12:31:28 82.147.85.78 (pid 27013) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: callvisvetlana@ list .ru
2023-12-17 17:11:47 82.147.85.79 (pid 15349) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: callvisvetlana@ list .ru
2023-12-17 17:28:04 5.254.23.80 (pid 16071) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: -1648
2023-12-17 19:57:21 103.251.167.20 (pid 26355) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: raulbl20@ takumi37 .mailvista .site
2023-12-17 20:48:51 51.68.196.224 (pid 30248) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: +15624371689
2023-12-17 23:03:00 178.168.114.40 (pid 8132) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: yaganimaks.im@ gmail .com
2023-12-18 04:08:19 46.148.206.226 (pid 4576) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: revers@ 1ti .ru
2023-12-18 05:20:44 146.70.111.146 (pid 10442) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: ilimabobrova19914221@ mail .ru
2023-12-18 09:05:38 91.107.194.105 (pid 27868) :Pub:!INFO: SPAM_ENCRYPT_NAME active mais _nospam_encrypt manquant sur formulaire login
2023-12-18 09:05:39 91.107.194.105 (pid 27868) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: Sunworld
2023-12-18 09:11:35 93.124.103.232 (pid 28702) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: vova80918@ mail .ru
2023-12-18 10:06:12 41.169.151.92 (pid 612) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: afQADPqjzsMmbKF
2023-12-18 10:06:13 41.169.151.92 (pid 511) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: cNFHtAsQKzVjG
2023-12-18 10:06:18 41.169.151.92 (pid 612) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: tnmQkKIdRBgAjNS
2023-12-18 10:06:19 41.169.151.92 (pid 509) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: lvMUwPYQZjFCO
2023-12-18 10:59:19 89.149.23.169 (pid 4329) :Pub:!INFO: form ecrire_auteur:email_nobot rempli: no.reply.MarkJensen@ gmail .com

Le « nospam.log » montre bien les messages bloqués par NoSpam.
Pour « nospam_suspects.log », je ne sais pas : jamais vu ce fichier par chez moi.

@tpique il reste des liens vers des sites de spammeurs (dans ton premier message notamment), peux-tu corriger pour qu’il n’aparapentiste plus stp ? (j’aime la créativité des correcteurs ortho)

Bonjour
Je veux bien changer le titre ou les anciens messages, mais je n’en ai pas la possibilité malheureusement.
Je ne peux que modifier le dernier posté

C’est bon je l’ai fait, et j’ai ajouté des raccourcis code dans ton premier message afin qu’il ne génère pas de lien vers les sites à spam.

Faudrait voir pourquoi nospam ne détecte pas les spams.
Est-ce qu’il a raison techniquement de pas les détecter ?

Indépendamment de cette question, voila un prédétecteur de spams (qui fonctionne en amont de nospam), qui m’a servi sur un site pour d’autres raisons et dont la mécanique peut servir pour boucher les trous de nospam si jamais yen a.

Dans mes_options ou le fichier d’option d’un plugin :

include_spip ('inc/verifier_spam_formulaires');
$GLOBALS['spip_pipeline']['formulaire_verifier'] .= "|truc_formulaire_verifier_kill_spam";
// définir les constantes des seuils comportementaux :
define ('_SPAM_SCORE_MIN_DIE_EARLY', 50); // seuil mortel
define ('_SPAM_SCORE_MIN_LOOKS_SPAMMY', 20); // seuil de modération

Et dans ‹ inc/verifier_spam_formulaires.php › :

function truc_formulaire_verifier_kill_spam($flux) {
	if (($_SERVER['REQUEST_METHOD']??'') != 'POST') {
		return $flux;
	}
	if (autoriser('ecrire')) { // Tout est permis pour les admins et les auteurs
		return $flux;
	}
       // piégé par nospam ?
	if (($_POST['email_nobot']??false) or ($_POST['nobot'] ?? false)) {
		die(truc_message_erreur());
	}
	$texte = trim(($_POST['texte']??'').' '.($_POST['texte_message_auteur']??''));

	$score = ($texte ? truc_spam_score ($texte) : 0);
	if ($score >= _SPAM_SCORE_MIN_DIE_EARLY) { // on meurt sans avoir enregistré
		die(truc_message_erreur());
	}
	if ($score >= _SPAM_SCORE_MIN_LOOKS_SPAMMY) {   // on modère
		$flux['data']['statut'] = 'prop';
	}
	return $flux;
}

function truc_spam_score(string &$texte='', &$badwords = false): int {
	$texte = trim($texte);
	if (!$texte) {
		return 0;
	}

	$bads = [
		'crédit'=>5, 'credit'=>5,...
               // liste de mots entiers avec leur poids, selon les besoins du site 
       ];
      
	$score = 0;
	foreach ($bads as $bad=>$howbad) {
		if (preg_match("/\b$bad\b/ui", $texte, $matches)) {
			$score += intval($howbad);
			if (is_array($badwords)) {
				$badwords[]=$bad;
			}
			if ($score >= 2*_SPAM_SCORE_MIN_DIE_EARLY) {    
				break;
			}
		}
	}
	return $score;
}

function truc_message_erreur() {
   return "ouais ben non là non";
}

La détection se fait à la Wiking… rien à voir avec la sophistication de nospam.

Une solution alternative peut être de supprimer le formulaire de contact et de mettre un email de contact à la place. Je sais c’est bizarre de dire « la solution aux spams c’est de mettre directement un email », mais l’avantage c’est que ça décharge le site de la détection des spams pour la refiler à l’hébergeur (via des choses implémentées en standard genre Spamassassin, les filtres bayésiens etc.) et pour les rares qui n’ont pas été bloqués au niveau de l’hébergeur, au logiciel de messagerie (thunderbird a un très bon système de filtrage qui apprend au fur et à mesure, par exemple). Ca me semble plus efficace qu’une solution développée maison.

In fine on est de toute façon obligés de mettre une adresse email dans les mentions légales du site donc on est déjà spammés de ce côté-là… Autant prendre acte et utiliser également cet email à la place du formulaire de contact. :sweat_smile:

1 « J'aime »

+1 c’est ce que j’ai tendance à faire depuis quelques années quand il n’y pas besoin de demander what mille infos dans des champs dédiés.

Bonjour
J’ai implémenté la solution de JLuc. Merci
Je vais attendre en vérifiant mes logs