Tag

spam

Browsing

Gravity Forms permet de créer rapidement des formulaires avec des logiques conditionnelles sous WordPress.

Dans les options de Gravity Forms, il existe une option qui ajoute un champ caché au formulaire, “honeypot”, qui permet d’éviter le spam mais qui doit être activé manuellement pour chaque formulaire, ce qui peut être rapidement fastidieux selon le nombre de formulaires que vous avez sur le site.

Voici comment activer et ajouter le champ honeypot à tous vos formulaires, automatiquement:

<?php
/**
 * Enforce anti-spam honeypot on all Gravity forms.
 *
 * @param array $form The current form to be filtered.
 * 
 * @return array
 */
add_filter( 'gform_form_post_get_meta', __NAMESPACE__ . '\\sky_enforce_gravity_forms_anti_spam_honeypot' );
function sky_enforce_gravity_forms_anti_spam_honeypot( $form ): array {
	$form['enableHoneypot'] = true;
	return $form;
}

Il y a quelques jours, j’ai eu la surprise de recevoir un spam manuel sur le blog – ce qui devient assez rare, la plupart du spam étant totalement automatisé. Et je dois dire qu’il m’a bien fait rire :

Echanger un dentier contre un gant de baseball… mais pourquoi pas ?? Ils sont fous ces spammeurs.

no-spamIl y a quelques années, j’ai pris part au projet Honey Pot qui vise à identifier les responsables d’envois massifs de courriers indésirables (autrement dit : du spam) grâce à des pages créées à cet effet. Dans la même optique, j’avais utilisé wpoison pour créer des adresses email bidons pour corrompre la base email des robots aspirateurs.

Et bien ce projet ambitieux vient de traiter plus d’un milliard de spams depuis son lancement. Cela a donné lieu à une petite étude et voici ce que l’on peut en retirer :

Il y a quelques jours, j’ai reçu un message sur Facebook, envoyé par un de mes contacts. Comme cela vient d’un contact de confiance, je clique sur le lien : rien ne se passe. Je l’informe alors que son lien ne fonctionne pas : elle me répond qu’elle n’a jamais envoyé ce message. Bizarre !

Le problème : un trojan MSN qui envoie des messages aux contacts Facebook

Il s’agit en fait d’un bon petit cheval de troie comme on en voit voyait tous les jours dans nos boites mail (avant Gmail). Le truc qui change, c’est qu’il se trouve dans un message à lire sur le site de Facebook. Les messages avaient les sujets suivants :

c’est pas toi ?
ta tof fais koi sur ce site ?

Is it u there??
Hey yo.
This video frm our weekend.
I saw you htere. I’m soo proud to see it.

No Spam !Vous possédez votre propre site et êtes submergés par le spam ? Si vous ne souhaitez pas confier votre précieuse correspondance à un service tiers de messagerie (webmail de votre FAI ou autres) et que votre hébergeur vous propose CPanel pour administrer votre site, voici comment se débarrasser des spams de manière automatique avec SpamAssassin et une règle de filtrage qui s’appliquera à chaque message reçu par le serveur.

AntispamAprès avoir pollué nos boîtes mail de scams et de tentatives de phishing – et certains sites de spywares et autres malwares – voici que les spammeurs ont trouvé une nouvelle cible : les newsletters. Cette tendance semble avoir démarré il y a quelques semaines : la newsletter de SkyMinds.Net subit par exemple une dizaine d’attaques par jour.

Le principe

Les spammeurs semblent vouloir corrompre les bases de données des newsletter en les populant avec des emails erronées (nom d’utilisateur ou domaine inexistant). Finalement, ils ont repris le principe de wpoison mais contre nos bases de données cette fois ! Le but de cette manoeuvre, à part la surcharge des serveurs mails et des filtres anti-spam, reste relativement obscur. Ils n’ont à priori rien à gagner ainsi.

Se protéger

Si vous gérer votre lettre d’information, vous risquez d’être la cible de ces spammeurs. Il existe plusieurs manières de s’en protéger :

  1. vérifier l’adresse email avant l’insertion dans la base de données : solution écartée car coûteuse en ressources. En effet, votre script doit vérifier le nom de domaine puis l’existence de l’utilisateur sur le domaine. La requête peut ne pas aboutir (time-out) et votre possible souscripteur aura quitté votre site devant la lenteur d’exécution.
  2. insérer l’adresse dans la base dès l’inscription puis valider selon quelques critères. C’est la solution retenue ici pour son efficacité et sa facilité d’utilisation.

Validation d’adresse email pour une newsletter

Prenons l’exemple de la newsletter de SkyMinds.Net qui utilise plusieurs routines afin de vérifier que la base données est bien peuplée d’adresses emails légitimes. L’adresse est ajoutée directement à condition qu’elle soit correctement formée. Un mail est alors envoyé au visiteur afin qu’il confirme son inscription. Sans aucun geste de sa part dans les 3 jours, l’adresse est supprimée.

  1. Vérification de la bonne formation de l’adresse email :
    /*
    Script Validation d'email par Matt - https://www.skyminds.net/
    Retourne TRUE si l'adresse est valide et FALSE si incorrecte.
    */
    function SkyVerif($mail)
    {
    	return(eregi("^[a-z0-9]+([_.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+\\.[a-z]{2,4}$",$mail));
    }
    
  2. Suppression automatiques des adresses non-validées dans les 3 jours suivant l’inscription. La table contenant les adresses contient deux champs : opt_in (statut de l’adresse, égal à no par défaut) et register_date (date d’inscription) :
    /*
    Script Antispam-Expiration par Matt - https://www.skyminds.net/
    Les adresses non validées au bout de 3 jours sont supprimées automatiquement
    */
    
    $sql = 'DELETE FROM ' . $newsletter_table . ' WHERE `opt_in`= \'no\' AND `register_date` < DATE_SUB(NOW(), INTERVAL 3 DAY)';
    $query = mysql_query($sql);
    

Ces routines sont lancées à chaque fois que quelqu'un cherche à s'inscrire sur la newsletter : pas besoin de cron pour garantir l'intégrité des données, chaque nouvelle inscription fait le ménage dans la base de données et optimise les tables : suppression automatique des fausses adresses et autres techniques "spammiques" !

Tiens, c’est bizarre, je commence à avoir du spam sur mon compte Gmail : je n’en avais jamais eu jusqu’à présent et j’ai bien dû en recevoir une dizaine aujourd’hui. Même s’il est immédiatement capté par les filtres et redirigé dans le dossier spam, on perd toujours du temps à vérifier que des messages légitimes ne sont pas passés à la trappe. Une vraie perte de temps.

Heureusement, je n’ai (quasiment) plus ce problème sur le blog : après des dizaines d’essais, je pense à être arrivé à la solution la plus intéressante en terme de défenses anti-spam. J’ai abandonné la solution en .htaccess qui bloquait certains utilisateurs pour utiliser les plugins suivants :

  • Akismet filtre tous les commentaires via ses serveurs,
  • TrackBack Validator vérifie que les pages qui envoient des trackbacks existent vraiment et que l’on fait bien référence au site,
  • Non-Numeric Names ventile à vue les commentaires postés avec des noms d’utilisateurs composés uniquement de chiffres,
  • EmailShroud encode toutes les adresses emails présentes sur les pages pour éviter le siphonnage des spam-bots,
  • WordPress Hashcash envoie un petit code Javascript au client au chargement des pages, ce qui roule les spam-bots dans la farine pour le moment.

Analysons un peu la situation : en activant seulement Akismet, le blog capte entre 100 et 200 spams par jour. En ajoutant WP-Hashcash et TrackBack Validator, c’est environ 2 tous les 3-4 jours et pas vraiment du spam mais plutôt des résultats de moteur de recherche genre Alice.fr ou Télécharger.com. Ce sont pour moi les 3 plugins les plus efficaces. J’ai essayé Bad Behavior pendant quelques temps mais cela ne m’a pas convaincu, doublant la taille de la base de donnée en quelques jours ! Je considère donc ma quête comme momentanément aboutie – être virtuellement spam-free, c’est très agréable !

Note : Akismet vient d’être mis à jour.

GhostBusterJ’ai récemment eu affaire à des voleurs de contenu et après avoir contacté le service des abus de MSN, j’ai reçue une réponse pré-formattée comme quoi il fallait que j’envoie tous les justificatifs et tous les détails prouvant mon identité à Microsoft par courrier postal. Mas bien sûr… et la marmotte…

Etant donné que je n’allais recevoir aucune aide de leur part, j’ai retroussé mes manches et me suis appliqué à trouver une solution.

Tout d’abord, j’ai revu le code .htaccess qui était censé prévenir le hotlinking mais qui visiblement ne fonctionnait pas : j’ai laissé tomber les règles mod_rewrite pour SetEnvIfNoCase, beaucoup plus efficace :

#
# Hotlink control - by SkyMinds.Net
#
SetEnvIfNoCase Referer "^http://www.monsite.net" local_referal
SetEnvIfNoCase Referer "^$" local_referal

<filesmatch ".(gif|jpe?g|png)$">
	Order Deny,Allow
	Deny From All
	Allow from env=local_referal
</filesmatch>

ErrorDocument 403 /403.shtml

Explications

Etant donné que les indélicats copient le code HTML des textes avec l’adresse des images, ils affichent de ce fait mes images sur leur site, ce qui ne leur coûte rien mais qui gaspille ma bande passante. Que je paye chaque mois.

L’astuce consiste donc à vérifier que la page qui fait appel aux images réside sur mon domaine. Dans le cas contraire, l’indélicat voleur reçoit une erreur 403 : les images ne s’affichent plus sur son site et notre bande passante n’est plus inutilement gaspillée. Résultats : happy webmaster :)

Non mis en place ici mais cela pourra en intéresser quelques uns : Smarter Image Hotlinking Prevention.

Hotlink Tests and Tools

Le truc à la mode chez les spammeurs en ce moment c’est le referrer spam, ou la pollution de vos logs Apache par des sites peu recommendables, vous donnant ainsi l’impression que la moitié de vos visiteurs sont des détraqués sexuels cherchant le repos dans des analyses économiques ou dans des exposés de littérature espagnole. Au début, on se demande comment ces mystérieux visiteurs ont pu trouver notre site. Après 3 ou 4 jours et quelques milliers de hits sur les mêmes pages avec un pic de consommation de bande passante, on commence à voir rouge. Ma mission (et je l’accepte) : bouter les spammeurs hors du site. J’ai pour cela étudié 2 possibilités : soit on gère tout avec Apache et ses .htaccess, soit on écrit un script PHP qui va bloquer les intrus et les envoyer ailleurs. J’ai privilégié le .htaccess vu que cela se fait au bas niveau du serveur, ce qui devrait consommer moins de ressources que l’interprétation du script PHP.

Méthode 1 : utilisation du .htaccess

Le principe est simple : nous allons tester la variable HTTP_REFERER de nos visiteurs et vérifier qu’ils ne sont pas blacklistés. S’ils le sont, on les expédie sur un site bidon (voir la dernière ligne). Toutes les lignes de la blacklist se finissent par [OR] ou [NC,OR] sauf la dernière qui se termine en [NC].

RewriteEngine On
RewriteCond %{HTTP_REFERER} ^http://(www\.)?joyvids.com.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?formymob.com.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?foryourmob.com.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?bkinky.com.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?topshelfinks.com.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?wickedringtones.com.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?pvblog.com.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?highprofitclub.com.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?wickedringtones3.com.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?wickedringtones4.com.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)adult(-|.).*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)anal(-|.).*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)gay(-|.).*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)mature(-|.).*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)nude(-|.).*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)porn(-|.).*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)pus*y(-|.).*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)sex(-|.).*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)teen(-|.).*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)tits(-|.).*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)titten(-|.).*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*accepted.cc$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*episodesusdbz/.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?advancedmoneyloans.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?affiliplanet.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?apart-?design.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?auktion.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?autogewinne24.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?autospiele24.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?babay.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?euromillionen.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?eurowins.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?geldspiele24.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?goovle.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?gsm-support.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?gzltax.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?heil-fasten.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?immobiliengewinne24.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?incest-.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?keywordmaster.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?nackt-stars-nackt.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?one2onemag.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?qw8.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?referrer-script.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?reisegewinne24.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?rootfood.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?shemale.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?single66.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?slamhost.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?spielepsychatrie.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?superface.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?topgewinn24.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?topspiele24.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?transexual.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?usa-wins.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?vendini.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?webmasterplan.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?wseeker.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?xmaster.*$ [OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?spammersite7.com.*$ [NC]
RewriteRule \.*$ http://spam.abuse.net/ [R,L]
RewriteEngine Off

Méthode 2 : utilisation d’un script PHP

Même principe mais en se servant de PHP, je ne vais pas réinventer la roue : suivez l’exemple de Holy Schmoly! ou de FragFactory.

Voilà, le mois de mars vient de commencer et je n’ai plus aucun pollueur dans mes stats. La liste est bien sûr à moduler selon vos spammeurs et les sites que vous souhaitez bloquer.

Aujourd’hui : installation de wpoison, un script perl qui sert à corrompre les bases d’emails des spammeurs en créant à la volée des pages HTML pleines de vraies-fausses adresses. Comme j’ai mis un peu de temps à configurer les droits d’accès du script, je vous fais ici part des principales étapes.

Tout d’abord téléchargez wpoison (click droit > enregistrer sous…) ainsi que le dictionnaire qui servira à générer le texte des pages web et des fausses emails.

Dézippez le dictionnaire. Vous avez maintenant deux fichiers : le dictionnaire et le script Perl. Uploadez-les sur votre site dans le répertoire de votre choix. Dans mon cas, je les ai placés sous /cgi-bin/ parce que c’est là que les spammeurs tapent en premier, selon mes logs.

Etape finale : définir les bons droits pour le répertoire et pour les deux fichiers. Chmodez tout en 755. Tada ! Installation terminée ;-).

Petit exemple live de wpoison.