26 mar. 2013

Spam, commentaires, modération à priori

Ca faisait longtemps que je ne vous avait pas entretenu de ce sujet. Je profite d'une courte accalmie pour vous donner un statut sur l'état actuel des choses.

En bref : je n'ai jamais autant été la cible de spammeurs, mais ça reste gérable.

Chaque jour, entre 120 et 250 commentaires indésirables sont ajoutés sur ce site. Un tel nombre fait que, nécessairement, et malgré leurs multiples qualités, les 5 filtres antispam[1] qui sont activés laissent passer un ou deux commentaires. Du coup, afin d'éviter ça, j'avais commencé à modérer ces commentaires à priori - c'est à dire que vous ne les voyez pas apparaître immédiatement, mais seulement une fois que je les ai validé de mon coté.

Ainsi, aucun spam n'est plus parut sur ce blog depuis de nombreux mois. C'est une bonne chose.

Mais la modération à priori a un coût - elle décourage les lecteurs de discuter sur l'article lui-même. Les lecteurs de longue date sont habitués au système, et acceptent généreusement de se prêter au jeu. Les autres, moins - d'autant plus que l'interface n'est pas très claire.

Afin de rendre la discussion plus fluide, j'ai décidé de limiter la limitation - en termes plus clair, la modération à priori ne sera effective que 7 jours après la publication d'un nouveau billet. Les raisons de ce choix sont là :

  • 99,9% du spam est effectué sur de vieux billets - ceux qui sont correctement référencés dans les moteurs de recherche
  • sur ces 99,9%, la très grande majorité (quasiment la totalité) est détectée pour ce qu'elle est - du spam
  • de fait, les quelques commentaires qui reste ont peu de chance d'être attaché à un billet récent (en fait, ce n'est pas arrivé depuis environ un an).
  • de plus, à chaque commentaire publié, je reçoit un email dans un répertoire particulier de ma mailbox - je peux donc agir très vite pour supprimer un spam.

Du coup, le fait de laisser les commentaires ouverts pendant un temps donné ne me paraît pas catastrophique. Si l'expérience se passe bien, je pourrais même étendre cette durée à 15 jours, voire un mois - on verra.

Pour aujourd'hui, et de manière tout ce qu'il y a de plus officielle, je vous annonce que tous les nouveaux billets verront leurs sections "commentaires" rester ouverte pendant 7 jours.

Merci de votre attention ! :)

Note

[1] IP filter, bad words, IP lookup, Link lookup et Akismet ; ce sont les supports de base sur Dotclear

Commentaires

1. Le mardi, mars 26 2013, 14:05 par Emmanuel Deloget

J'en profite pour vous rappelez que vous pouvez obtenir des nouvelles régulières concernant ce blog en vous inscrivant à la newsletter AL&D.

C'est rapide, gratuit, et non, je ne revends pas les adresses email ainsi collectées :)

2. Le mardi, mars 26 2013, 15:20 par Emmanuel Deloget

Pour ceux qui sont intéressés, il m'a fallut modifier dotclear pour arriver à ce résultat. Le patch, qui doit être appliqué sur dotclear 2.5 (la version que j'utilise) est le suivant :

 inc/core/class.dc.rs.extensions.php |   21 +++++++++++++++++++++
 inc/public/lib.urlhandlers.php      |    6 +++++-
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/inc/core/class.dc.rs.extensions.php b/inc/core/class.dc.rs.extensions.php
index 243bd82..15f51ef 100644
--- a/inc/core/class.dc.rs.extensions.php
+++ b/inc/core/class.dc.rs.extensions.php
@@ -212,6 +212,27 @@ class rsExtPost
 	}
 	
 	/**
+	Return the post age (in seconds)
+
+	@param	rs	Invisible parameter
+	@param	type	<b>string</b>		(d|h|m|s) defaults to s
+	@return <b>integer</b>
+	*/
+	public static function getAge($rs,$type='s')
+	{
+		$age = time() - strtotime($rs->post_dt);
+		if ($type == 'd') {
+			return $age / (60 * 60 * 24);
+		} else if ($type == 'h') {
+			return $age / (60 * 60);
+		} else if ($type == 'm') {
+			return $age / 60;
+		} else {
+			return $age;
+		}
+	}
+
+	/**
 	Returns post timestamp.
 	
 	@param	rs	Invisible parameter
diff --git a/inc/public/lib.urlhandlers.php b/inc/public/lib.urlhandlers.php
index 7ff1f87..4f3e52d 100644
--- a/inc/public/lib.urlhandlers.php
+++ b/inc/public/lib.urlhandlers.php
@@ -440,7 +440,11 @@ class dcUrlHandlers extends urlHandler
 						$cur->comment_email = html::clean($mail);
 						$cur->comment_content = $content;
 						$cur->post_id = $_ctx->posts->post_id;
-						$cur->comment_status = $core->blog->settings->system->comments_pub ? 1 : -1;
+						if ($_ctx->posts->getAge('d') >= 7) {
+							$cur->comment_status = -1;
+						} else {
+							$cur->comment_status = $core->blog->settings->system->comments_pub ? 1 : -1;
+						}
 						$cur->comment_ip = http::realIP();
 						
 						$redir = $_ctx->posts->getURL();
3. Le jeudi, mars 28 2013, 00:28 par alpha_one_x86

Le spam, un des grands fléau du web. Le web serai tellement agréable sans. Moi j'ai d'autre astuce:
- Mettre le forulaire en js, la plus part des bot qui spam n’interprète pas le js
- Mettre un tracker dans une image, ne peu poster que si il as afficher l'image (et donc mit un truc dans $_SESSION['antispam']), faire des rewriterules pour camouflé que sa passe par un php.
A chaque fois que j'ai fait ça, j'ai été tranquille.

4. Le vendredi, mars 29 2013, 00:09 par Emmanuel Deloget

A mieux lire le code source de dotclear, je me suis apperçu que je peux faire quelque chose de similaire avec un plugin.

Je vais donc l'écrire, et ainsi laisser mon code dotclear vierge de toute modification (ça sera mieux, hein ?)

@alpha_one_x86: c'est une idée. Etant donné que je suis en train d'écrire un thème pour dc2 et que (à priori) le formulaire est géré par le thème, je pense que je vais faire ça aussi. Ca devrait être plus sympatique en plus.

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant une syntaxe wiki simplifiée.

Fil des commentaires de ce billet