Supprimer massivement des blogs de spammer sur une plateforme wordpressMU. Depuis un nom de domaine issu d’une adresse email, une adresse email, supprimer la ou les blogs du membre automatiquement.
Pourquoi ce script de purge de spammer de wordpress MU ?
Devant notre besoin grandissant de faire un petit ménage dans une plateforme MU ouverte et publique et supprimer facilement les blogs utilisés par des spammer, nous avons crée ce petit script. Il permet à l’opérateur qui perdait plein de temps à regarder chaque blog, de supprimer massivement une liste de blog dont les emails des membres sont sur un même domaine.
Ce script énumère et compte les nombres de blogs par domaine ( domaine du compte email) , puis supprime les comptes et les blogs que vous renseignez , automatiquement.
Version Alpha 0.1
Attention :
Ce script n’est absolument pas destiné à un utilisateur final, mais est plutôt une suite de fonctions utilisable pour qui sait lire et coder en PHP
Le code n’est clairement pas optimisé, mais sert plutôt de base à votre propre outil de nettoyage de votre plateforme de blog.
Licence : Freeware. Utilisable gratuitement et par tous pour un besoin personnel ou pour un service commercial.
Objectif de ce script: supprimer les blog des spammer
Identifier des blogs crées chez vous avec un compte email issu du même nom de domaine.
Un spammer automatise ses taches, il utilise donc un email « catch-all » : « Quelque soit cette chaine alphanumérique »@domaine001.com aboutie dans un compte mail unique et bien réel, ceci permet de gérer de nombreux comptes mail. C’est sur ce point que nous allons identifier les spammer, puis purger la base de blog.
Comment utiliser ce script: identifier les spammer, puis purger
Le code source est a la fin de l’article.
1/3 : Créer un fichier à la racine de votre blog et exécutez le script.
Vous obtiendrez ainsi une liste de spammer. En effet notre script énumère les domaines des emails de vos membres.
Ainsi, vous obtiendrez quelque chose que ressemble a ceci
[...]
4/5 Liste de Host connu et Compteur de compte-catchall :
domaine001.com - 1
domaine002.be - 7
domaine003.com - 24
domaine004.pl - 201
domaine005.com - 3
[...]
Vous remarquez que le nom de domaine « domaine004.pl » possède (dans cet exemple) 201 blogs sur votre site. Il est évident que ce nom de domaine est un domaine catch-all c’est a dire qu’un seul utilisateur utilise domaine004.pl pour crée a la volée des comptes sur votre wordpressMU.
2/3 La seconde étape ( Notions de PHP requises )
Vers la ligne 98
// test du mail
$GoDelMail=array();
// AJOUTEZ VOS FILTRES ICI
$GoDelMail[]='domaine004.pl'; // juste le nom de domaine
Ajouter les filtres qui sont les domaines catchall de vos spammers …
3/3 Troisième étape, relancer le script
Relancez le script et vous purgerez ( ATTENTION SUPPRESSION !!!) les tables et l’entrée dans votre liste de blogs correspondant aux membres utilisant ce nom de domaine (email) pour crée des comptes chez vous.
Connectez vous ensuite a votre interface d’administration et constatez qu’un très grand nombre de blogs a disparu, ceux des spammé que vous avez identifié.
Comment améliorer ce script.
Il existe de nombreuses façons d’améliorer ce script, mais vous constaterez qu’une bonne configuration de votre Wordpress, notamment en définissant des listes d’email interdit, vous permettra de facilement limiter les créations de comptes de spammer.
- Lancez simplement ce script automatiquement tous les soirs pour purger votre base
- Et chaque mois, lancez ce script à la main pour découvrir la nouvelle liste de comptes utilisant massivement le même domaine .
Pour gagner du temps, mais à vos risque et péril, vous pouvez ajouter une fonction qui supprime les blogs si le domaine de l’email est présent plus d’un certain nombre de fois, mais ceci pose un problème avec les comptes des types Gmail, Hotmail …
Voilà pourquoi ce petit script est fait, pour vous aider à purger facilement votre base, mais en aucun cas une suite de protection pour un utilisateur final. Le code utilise une syntaxe PHP très basique, digne de PHP3 ce qui permet de facilement le modifier et l’adapter.
Si vous utilisez ce code merci de faire un petit lien vers cet article avec pour ancre, par exemple
<a href="http://www.wordpress-seo.com/suppresion-des-blog-sur-wordpressmu-en-fonction-de-email-du-compte.php">Notre Wordpress est protégé par un script de Wordpress-SEO.com</a>
Merci d’avance à ceux qui nous feront un lien, même depuis une petite page de lien au fin fond de votre site.
Et bonne purge à tous
Wordpress-SEO.com des solutions professionnelle, rapide et efficace pour l’utilisation professionnelle de votre wordpress
Le code PHP (basic)
<a href= »http://www.wordpress-seo.com/suppresion-des-blog-sur-wordpressmu-en-fonction-de-email-du-compte.php »>Notre Wordpress est protégé par un script de Wordpress-SEO.com</a>
/*
---------------------------
del_bad_email_liste.php
---------------------------
copyright Wordpress-SEO.com
--
Utilisation libre de droits pour toute utilisation commerciale ou personnelle
--
Nous demandons optionnellement un lien retour vers notre site par exemple : , très classe en footer ;) , ou depuis une page d'un de vos sites ... merci .
--
*/
define('WP_USE_THEMES', false);
require_once( dirname(__FILE__) . '/wp-load.php' );
/* SETTINGS */
// On cherche uniquement les Blog ayant un ID > a cette valeur
$CONST_Limite_Basse_ID=0; // Par defaut 0
// nouvelles valeurs
$CONST_IsKeep=1;
$CONST_IsSpam=2;
$CONST_IsDel=3;
// debug
$DebugCompteur_delete=0;
$DebugCompteur_spam=0;
// liste des blog
$MyBlogList=array();
$ListHost=array();
// ----------------------------------------------------
// retourne 1= oui
// ----------------------------------------------------
function Chaine_Fini_Par($source,$cherche)
{
$source=strtolower($source);
$Returned=0;
$patern = '/'.$cherche.'$/';
if (preg_match($patern, $source)){$Returned=1;}
return $Returned;
}
// ----------------------MAIN-------------------------------
// ----------------------MAIN-------------------------------
// ----------------------MAIN-------------------------------
// ----------------------MAIN-------------------------------
// Connect to database
$db = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
mysql_select_db(DB_NAME, $db);
echo "WARNING: Limite basse de recherche = $CONST_Limite_Basse_ID <br>";
$SQL = 'SELECT * FROM '.$table_prefix.'blogs WHERE blog_id >'.$CONST_Limite_Basse_ID.'';
$R = mysql_query($SQL);
// charge la liste de base
echo "1/5 Charge la liste de blog<br>";
while( $row = mysql_fetch_assoc($R) ) {$MyBlogList[]=$row;}
$max= count($MyBlogList);
echo "WARNING: Trouver <b>$max</b> blog a tester <br>";
echo "2/5 Charge la liste des email pour les blogs<br>";
// ajoute les mail
for($i = 0; $i < $max; $i++)
{
// PrefixId_options
$SQL="SELECT option_value FROM ".$table_prefix."".$MyBlogList[$i]['blog_id']."_options WHERE option_name = 'admin_email'";
$R = mysql_query($SQL);
while ( $row = mysql_fetch_assoc($R) ){$MyBlogList[$i]['email'] = $row['option_value'];}
}
echo "3/5 Teste la liste d'exclusion<br>";
// On cherche les parametres d'exclusion
// ajoute les mail
for($i = 0; $i < $max; $i++)
{
$MyBlogList[$i]['my_action_clear']=$CONST_IsKeep;
$s=explode ( '@' , $MyBlogList[$i]['email'] );
if(isset($ListHost[$s[1]]) ) {$ListHost[$s[1]]++; }else { $ListHost[$s[1]]=1; }
// ne pas editer ci dessus
// test du mail
$GoDelMail=array();
// AJOUTEZ VOS FILTRES ICI
$GoDelMail[]='domaine004.pl'; // juste le nom de domaine
// [...]
// ne pas editer ci dessous
$maxmail=count($GoDelMail);
for($j=0;$j<$maxmail;$j++) { if( 1== Chaine_Fini_Par($MyBlogList[$i]['email'],$GoDelMail[$j]) ) {$MyBlogList[$i]['my_action_clear']=$CONST_IsDel;} if($MyBlogList[$i]['my_action_clear']!=$CONST_IsKeep) {break;} }
switch($MyBlogList[$i]['my_action_clear']) {case $CONST_IsKeep: break; case $CONST_IsSpam: $DebugCompteur_spam++; break; case $CONST_IsDel: $DebugCompteur_delete++; break; } }
if(0==0){ // =1 si inctif !
echo "--------------------------------------<br>";
echo "4/5 Liste de Host connu et Compteur de compte-catchall :<br>"; ksort($ListHost); foreach ($ListHost as $key => $value) { echo $key.' - '.$value.'
';}
echo "--------------------------------------<br>";
} // if 0
else{echo "4/5 Liste de Host connu : => ZAP<br>";}
echo "5/5 Purge de la base<br>";
echo "Rapport d'exclusion :<br>";
echo "Delete: <b>$DebugCompteur_delete</b> blog(s)<br>";
echo "Spam: <b>$DebugCompteur_spam</b> blog(s)<br>";
for($i = 0; $i < $max; $i++) {
switch($MyBlogList[$i]['my_action_clear']) {
case $CONST_IsKeep: break; // rien
case $CONST_IsSpam: // TODO
break;
case $CONST_IsDel:
echo "Suppression du blog (".$MyBlogList[$i]['blog_id'].")<br>";
// "PrefixId_%"
$SQL="SHOW TABLES LIKE '".$table_prefix."".$MyBlogList[$i]['blog_id']."_%'"; $tables = $wpdb->get_results($SQL, ARRAY_N);
if ($tables){
foreach ($tables as $table){
$SQL="DROP TABLE IF EXISTS ". $table[0];
$wpdb->query($SQL);
}
}
mysql_query("DELETE FROM ".$table_prefix."blogs WHERE blog_id = '".$MyBlogList[$i]['blog_id']."'");
break;
}
}
echo "DONE";
exit();
?>







