En février 2018, j’avais fait un petit point sur une tâche régulière, répétitive et rébarbative liée à LinuxFr.org, qui n’est probablement pas significativement perçue par la plupart des lecteurs (tant mieux) : la gestion du spam, des pénibles publicitaires sans scrupules, de la plaie des SEO, des escroqueries et autres arnaques type scam ou loterie, etc. Bref, des pénibles du quotidien qui ne sont pas des vrais visiteurs du site, mais qui veulent juste fourguer leur camelote par n’importe quel moyen. Il s’agit d’évoquer les différentes formes que cela prend, les méthodes mises en place pour réduire ou bloquer la nuisance et d’illustrer le propos par divers exemples.
Contexte
Je me balade sur le site, je vois un commentaire vantant un comparatif de VPN, je me dis que c’est louche (pour plein de raisons, la huitième va vous étonner, mais principalement par expérience, voir plus loin la discussion sur PreSpam), c’est un nouveau compte. OK, il s’agit donc d’un spam de type SEO sournois. Pris d’une frénésie vindicative contre le spam, je lance une recherche en base de données sur ce domaine en particulier. Une seule occurrence. Petite déception, j’étais persuadé d’en voir plus régulièrement des vendeurs de spams, euh, de VPN.
Là, paf, mauvais réflexe, je me dis qu’il suffirait de lister tous les domaines présents dans les commentaires supprimés sur les trois dernières années, de nettoyer un peu tout ça, et de relancer une recherche pour détecter du spam résiduel. Après tout, y en a juste pour cinq minutes.
Sommaire
- À la recherche du spam perdu
- La liste des domaines/URL des pénibles du coin
- Détection et traitement
- Conclusion
Quelque temps plus tard, me voici en possession d’une liste de plus de deux cents domaines et/ou morceaux d’URL.
À la recherche du spam perdu
Donc cinq minutes on avait dit, pas la peine de faire dans le subtil, optons pour le brutal.
D’abord une petite recherche tout en délicatesse sur les commentaires (SELECT comments.id, comments.created_at FROM comments WHERE state!='deleted' AND (body LIKE '%iamabigvillain.invalid%' OR …);
), en gros une pleine page de requêtes SQL cracra.
La première exécution donnera 9 résultats, en raison d’un faux positif (un des domaines est juste un site lié à l’impression 3D en général, et les spammeurs ont utilisé des sous-parties du site alors que j’avais filtré sur le domaine complet). Après nettoyage, cela donnera :
+---------+---------------------+
| id | created_at |
+---------+---------------------+
| 1647294 | 2016-03-09 15:33:37 |
| 1703702 | 2017-06-03 07:39:51 |
| 1753669 | 2018-11-06 18:18:50 |
| 1768965 | 2019-04-25 08:23:37 |
| 1768975 | 2019-04-25 08:36:30 |
+---------+---------------------+
5 rows in set (51 min 5.62 sec)
OK, donc au moins encore cinq commentaires à nettoyer au lance‐flammes.
À tout hasard, jetons un œil du côté des contenus, de manière tout aussi délicate (du type SELECT diaries.id, diaries.created_at FROM diaries,nodes WHERE diaries.id = nodes.content_id AND nodes.content_type='Diary' AND nodes.public=1 AND (body LIKE '%iamabigvillain.invalid%' OR …);
pour les journaux, par exemple. Après 3 min et 30 s pour les journaux, 2 min 18 s pour les forums, 5 s pour le suivi, 1 min 20 s et 3 min 24 s pour les dépêches (première et seconde parties) et 4 s pour les pages wiki, et en omettant les sondages et les liens pas vraiment concernés, on peut conclure que les contenus ne sont pas trop concernés (ou plutôt que le ménage y a déjà été fait précédemment).
Le traitement des cinq commentaires détectés va permettre de fermer quatre comptes, de finalement supprimer un total de dix‐neuf commentaires : oui, souvent le SEO tergiverse, flâne, complimente, tourne autour du pot, avant de poser son étron sur la table, donc il y a souvent plusieurs commentaires d’approche avant les premiers commentaires de pur spam. En cas de nettoyage, tout est supprimé. Au passage, on gagnera aussi quatre domaines supplémentaires, et on aura le droit de recommencer la recherche en incluant ces quatre nouveaux domaines [Empty set (52 min 8.04 sec)
].
La liste des domaines/URL des pénibles du coin
Que trouve‐t‐on dans la liste des domaines/URL des pénibles fréquentant LinuxFr.org ? Est‐on plutôt dans le domaine jacky tuning auto, joaillerie parfumerie luxe, sadomasochisme et bondage, couture et pâtisserie ou tutoriel jardinage ?
Une grande catégorie (plutôt anglophone) comporte les applications : il semble qu’il existe de nombreux sites dédiés aux applications mobiles (probablement légitimes et pas directement propriétés des spammeurs SEO), de la forme nom.du.site/nom_appli
, et donc, naturellement, on se retrouve avec plein de noms contenant apk, app, download, android, ios, mob, etc. Et sur chacun de ces sites, notre spammeur va essayer de fourguer ces applis, souvent les mêmes. Les applis, d’après leurs noms, semblent être liées (en tout cas prétendre être liées ou utiliser des noms faisant penser que) à Android en général, à la communication et les réseaux sociaux, aux achats (légaux ou non), aux jeux d’argent en ligne, aux VPN et Wi‐Fi, aux torrents, etc. Et parfois le spammeur a directement un domaine pour fourguer son application. Ça reste de toute façon varié, on va trouver du .com
, du .biz
, du .vip
, du .in
(Inde), du .onl
, .software
, du .fyi
, etc.
On va aussi trouver la même chose pour des applis non mobiles ou des sites, avec des usurpations assez évidentes de noms sur des jeux connus (Counter Strike, Minecraft, etc.), des services connus (iTunes, Google Play, comment contourner Hadopi, etc.), et le logiciel libre n’est pas épargné (7-Zip, FileZilla, Kodi, etc.). On peut y ajouter les jeux (d’argent ou non) en ligne (du games, du poker, du casino, etc.) et les applis servant à se protéger (nettoyeurs, bloqueurs) ou attaquer (logiciels espion, pirater des comptes GAFAM), il suffit d’avoir confiance…
En vrac, on peut aussi trouver du vendeur de parfums, des comparateurs de trucs (VPN, mutuelles, banques, énergie, téléphone, etc.), de coloriage, de pneus, de SEO, de l’huile à barbe, un chirurgien esthétique, du médical en général, un site anti‐arnaques (sic), des (faux) sites de support en ligne (HP, iTunes, Lenovo, etc.), du cul (à consulter ou en rendez‐vous), du streaming de sport, du JSON (si), du marabout, du site à clic sur les chats malades ou les poupées en silicone, du serrurier parisien, de l’agence de communication, du patin à roulettes, des thermomètres pour bébé, des prêts à la consommation, des produits reconditionnés, de la relecture de textes, etc. Et un peu de non identifiable (probablement lié à des langues étrangères ou des références « subtiles »).
Enfin, on peut citer la catégorie de l’indirection : il s’agit de pointer vers une entrée sur un autre site (qui, comme LinuxFr.org, permet aux visiteurs de créer des comptes et de commenter) qui va lui contenir le spam ou des liens vers le spam. C’est varié, ça peut être des titres de presse, des sites type réseaux sociaux ou blogs, des hébergeurs gratuits, des boutiques sur des sites marchands, etc., et c’est varié en termes de langues aussi (vietnamien, brésilien, indonésien, pakistanais, etc., ça fait voyager).
Détection et traitement
On constate :
- des comptes ouverts et jamais utilisés, qui sont soit des vrais spammeurs qui n’ont jamais réussi à spammer (robots ou humains dysfonctionnels), soit des utilisateurs légitimes (et c’est assez indiscernable sur un compte sans contenu, sans commentaire et qui a le même domaine pour le courriel qu’un tiers des comptes valides, par exemple, tout en ayant une adresse IP dans une plage tout aussi indiscernable) ;
- des comptes ouverts avec spam d’entrée (c’est plutôt rare, et plutôt sur du spam francophone, tendance SEO débutant) ;
- des comptes ouverts, puis attente avant de commencer à spammer ;
- des comptes ouverts, des propos lénifiants (merci, c’est très intéressant, etc., le plus souvent en anglais d’ailleurs, puis spam quelques commentaires plus tard) ;
- des comptes ouverts, des copier‐coller de commentaires déjà existants ou trouvés sur d’autres sites, avec liens de spam en bonus ;
- pas vraiment de cas de réédition des commentaires plus tard (la période de réédition de ses commentaires sur LinuxFr.org étant probablement trop courtes pour ça) ; en revanche, on va poster sur des vieux contenus âgés d’un ou deux mois .
On réagit avec :
- de la vigilance et de l’expérience de l’équipe de modération ;
- des remontées par les visiteurs, qui aident pas mal ;
- si un motif est identifié, on peut lancer une petite requête en base de données pour voir si l’on s’est déjà fait avoir ;
- une attention portée au besoin de bienveillance pour les nouveaux ; on ne peut pas demander à chaque nouvel inscrit, un dossier complet avec copie de passeport, un mot des parents, une caution bancaire, une clé GPG premium et un compte IRC certifié, plus une période de surveillance avec modération a priori pour chaque caractère tapé ; donc, il y a un compromis entre la forteresse vide et l’agora avec un videur discret pour les indélicats.
Un exemple de l’expérience en modération, ce que j’ai appelé PreSpam (en référence à PreCrime de P. K. Dick, dans Minority Report notamment) :
20:23:56 Benoît Sibaud : [url] futur spammeur ?
20:25:41 Benoît Sibaud : C’est pour voir si ma boule de cristal est bonne en prédiction ou non
22:44:04 Ysabeau : Là [url], ça sent le spam à plein nez, le lien renvoie vers un truc qui n’a rien à voir.
22:45:55 Ysabeau : Donc, oui, c’était bien un futur spammeur, commentaire supprimé.
11:18:03 Benoît Sibaud : Compte fermé.
ou :
20:18:35 Benoît Sibaud : [url] nouveau signalement de PreSpam ?
21:15:20 palm123 : à surveiller
(2 jours plus tard)
06:59:10 Julien Jorge : Il revient [url]
10:07:59 palm123 : Il essaie de monter son karma
10:27:18 Benoît Sibaud : Plutôt de passer deux commentaires 'plausibles' pour éviter une détection (je ne suis sûr que notre système de karma soit suffisamment commun pour être pris en compte par un spammeur).
10:27:53 Benoît Sibaud : On a déjà de multiples cas de “je spamme au 3ᵉ commentaire”.
(cette dernière expérience continue, cet utilisateur n’a posté que deux commentaires. Suspense !)
Conclusion
C’est pratique, je peux réutiliser à peu près la même conclusion que la dernière fois (d’autant que cette dépêche ne doit me prendre que 5 minutes, évidemment). J’espère avoir donné un petit panorama varié des publicitaires pénibles et des SEO sans scrupules, bref du spam reçu/subi par l’équipe LinuxFr.org. C’est malheureusement un travail régulier de les bouter hors d’ici : chaque lettre rétrospective de la quinzaine passée, comme la dernière de début avril 2019, mentionne le sujet, inlassablement. Avec un peu de chance, l’équipe agit suffisamment vite pour que vous n’en perceviez qu’une petite partie (idéalement 0). Lorsque vous détectez du spam, n’hésitez pas à nous le signaler (étiquette [tag] spam sur un contenu, par tribune de rédaction, par courriel, etc., peu importe), on adore le bruit que cela fait quand on l’écrase.
Si vous avez vous‐même une expérience sur le spam sur votre propre site ou dans une autre communauté, si vous avez des idées d’outils ou de configuration, n’hésitez pas à partager dans les commentaires.
Et si vous êtes un spammeur/SEO et que vous voulez placer vos solutions dans lesdits commentaires parce que ça a l’air bien ici ça parle spam et SEO, sachez que je vous conchie toujours.
# Business is business
Posté par gUI (Mastodon) . Évalué à 10.
A vendre, compte créé le 13/08/2008, karma à plus de 5000, idéal SEO, indétectable par la patrouille.
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: Business is business
Posté par Katyucha (site web personnel) . Évalué à 2.
Je sais même pas où voit son karma …
[^] # Re: Business is business
Posté par gUI (Mastodon) . Évalué à 6.
Clique sur ton pseudo, et sur la colonne de gauche, sous "rédaction", tu as une rubrique avec des infos sur ton compte, dont le karma.
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: Business is business
Posté par FantastIX . Évalué à 2.
Moi, mon karma, l'est dans le comma. Sans doute à cause de mes Attaques répétées sur Linuxfr…
-->[]
# Intéressant
Posté par Exagone313 (site web personnel, Mastodon) . Évalué à 2.
Intéressant…. non je rigole je ne suis pas un bot :)
Ça serait marrant d'avoir un peu de détection automa… ah oui non c'est dangereux, faut pas se mettre à filtrer les contenus, après on va montrer aux États de surveillance que c'est réalisable dans une certaine mesure.
[^] # Re: Intéressant
Posté par Benoît Sibaud (site web personnel) . Évalué à 5.
C'est une question de volume : des dizaines/une centaine de commentaires par jour ça passe avec quelques modérateurs bénévoles. En centaines/milliers, ça va les saouler, il en faudra beaucoup ou plutôt il faudra payer des gens blasés pour lire les commentaires. En dizaine/centaines de milliers ou millions, il faudrait une armée de modérateurs ou un traitement automatique avec les problèmes de sur/sous-blocage que ça peut poser.
Vu que l'on n'a pas encore de bouton de signalement de commentaires (contrairement aux contenus que l'on peut taguer spam, et qui sont bien moins nombreux par jour), le nombre de visiteurs n'aide pas trop pour la modération.
[^] # Re: Intéressant
Posté par cyberjunkie . Évalué à 4.
C'est vrai ça, pourquoi on peut pas spam-tag les commentaires ? Ça aiderait sûrement…
[^] # Re: Intéressant
Posté par gaaaaaAab . Évalué à 2.
Tiens, j'en ai un : https://linuxfr.org/nodes/116619/comments/1770089
l'adresse pour remonter les comptes qui ne spam que dans les commentaires, c'est moderateur chez linuxfr.org ou c'est une autre ?
[^] # Re: Intéressant
Posté par gaaaaaAab . Évalué à 2. Dernière modification le 05 mai 2019 à 11:14.
je note que le compte a été fermé, mais le commentaire pas modéré. Est-ce un autre pattern où le spammeur ferme son compte après avoir posté son spam pour réduire l'incitation au signalement par les lecteurs ?
[^] # Re: Intéressant
Posté par Benoît Sibaud (site web personnel) . Évalué à 3. Dernière modification le 05 mai 2019 à 11:38.
ça marchera avec moderateurs@ ou team@. Merci pour le signalement. Du coup j'en ai profité pour rajouter et déployer le test régulier de la base de données (donc un signalement automatique des cas déjà connus, en plus de la vigilance de la modération et des signalements des visiteurs).
# Coquille
Posté par SRL . Évalué à 2.
Discord a libéré Discord entre parenthèses.
[^] # Re: Coquille
Posté par Benoît Sibaud (site web personnel) . Évalué à 3. Dernière modification le 28 avril 2019 à 12:19.
Corrigé, merci.
# Merci à tous
Posté par Kerro . Évalué à 8.
Tout d'abord : merci à tous pour inutiler/signaler le moindre SPAM dès qu'il pointe son nez.
Ces derniers temps j'en ai inutilé 2 en étant le premier à tomber dessus. Ça ne change rien, il est juste caché pour ceux qui ne naviguent pas en -42.
Il y a très peu de SPAM sur ce site, donc ils polluent peu notre attention.
Si les liens sont en NOFOLLOW, cela ne suffit pas pour que le SEO soit inopérant ? Beaucoup de forum mettent les liens en NOFOLLOW, ce n'est pas le cas ici, quelle est la
vraie
raison ? (vraie raison = pas un baratin idéaliste)À titre perso je fais du SPAM : j'ai un lien vers mon entreprise à côté de mon pseudo. Ça fait actuellement plus de 6000 liens.
Un spammeur pas trop stupide peu faire la même chose, il lui suffit de poster un commentaire utile une fois pas mois et il aura un SEO correct depuis ce site.
[^] # Re: Merci à tous
Posté par Benoît Sibaud (site web personnel) . Évalué à 8.
Le lien vers le site perso est en "nofollow" pour les karmas inférieurs au karma initial.
Le lien vers les commentaires d'un compte donné (sur la page dudit compte) est en "nofollow" (ils seront indexés ou non avec le contenu concerné).
Les pages de contenu notés strictement négativement sont en "noindex, nofollow".
Les liens des commentaires n'ont pas de réglage "nofollow" actuellement, ce qui est une partie du problème.
Les spammeurs humains ne regardent probablement pas si les liens sont en nofollow ou noindex (déjà qu'ils ne comprennent pas la langue du site sur lesquels ils spamment, le plus souvent). De toute façon ça dépend du moment où ils le regardent si c'est dépendant du karma. Enfin le nofollow/noindex, c'est pour les moteurs de recherche, ça n'empêche pas des humains de cliquer dessus, donc d'un point de vue spam, est-ce que ça vaut le coup de s'embêter à vérifier si y a du nofollow/noindex ? On a bien du spam dans les contenus alors qu'ils sont vite notés négativement (puis masqués administrativement).
[^] # Re: Merci à tous
Posté par Benoît Sibaud (site web personnel) . Évalué à 6.
J'ai créé une entrée dans le suivi mais globalement ça ne semble pas si facile à faire (la conversion markdown->html n'est pas refaite à chaque fois pour les commentaires).
Sinon concernant ta question, voir sur Nofollow Criticism of usage by Wikipedia : Wikipédia a généralisé le nofollow, le site d'origine se retrouve en compétition avec Wikipédia niveau visibilité (donc perd le plus souvent), perd même en visibilité, et en plus ça n'empêche pas les brillants SEO de venir quand même.
[^] # Re: Merci à tous
Posté par ComputingFroggy (site web personnel) . Évalué à 2.
Je plussoie : effectivement, pourquoi ne pas mettre les liens en NOFOLLOW ?
# Requêtes SQL lentes ?
Posté par windu.2b . Évalué à 4.
En lisant ça :
Je me demande si la base de données de linuxfr est aussi volumineuse que ça, ou si quelques optimisations ne manqueraient pas (index, …) ?
Peut-on consulter le schéma de la BDD ?
[^] # Re: Requêtes SQL lentes ?
Posté par Bruno Michel (site web personnel) . Évalué à 5.
Ici, c'était juste des requêtes lancées une fois à la main. On n'a pas cherché à optimiser et encore moins à mettre un index juste pour ça.
Il y a une version en Ruby ici : https://github.com/linuxfrorg/linuxfr.org/blob/master/db/schema.rb.
[^] # Re: Requêtes SQL lentes ?
Posté par Benoît Sibaud (site web personnel) . Évalué à 6.
On parle d'une requête de goret avec 200 recherches de sous-chaînes en texte brut sur chaque entrée d'une table de 1,7 M de commentaires. Clairement ce n'est pas optimisé de faire ça (mais ça ne prétendait pas l'être).
[^] # Re: Requêtes SQL lentes ?
Posté par barmic . Évalué à -2.
Comme quoi mongo c'est pas si mal :p
[^] # Re: Requêtes SQL lentes ?
Posté par Jean Roc Morreale . Évalué à 3.
avec postgresql, un index GIN et les outils FTS, le tout avec de très bonnes performances :)
[^] # Re: Requêtes SQL lentes ?
Posté par Anonyme . Évalué à 2.
Ouais, mais Mongo c’est webscale.
# Pareil pour ma forge...
Posté par Mathias Bavay (site web personnel) . Évalué à 3.
Sur une forge logicielle dont je m'occupe, j'ai aussi des problèmes de spam sur le système de tickets. Pour l'instant, je fait le nettoyage à la main, en cherchant dans les logs d'apache quelle est l'IP responsable, puis via un whois, quel est le domaine. Ensuite, je mets la plage d'IP appartenant au domaine dans hosts.deny et je laisse fail2ban faire le videur. C'est très manuel, mais mon espoir est que ce sont toujours les mêmes entreprises (dans un pays à la main d’œuvre peu coûteuse) qui génèrent ce genre de spam, donc que rapidement je dois pouvoir en bloquer la majorité. Vu que le code php de ma forge n'est plus développé, il n'est pas possible d'intégrer d'autres choses plus automatiques…
Par exemple, désactiver les liens dans les commentaires tant qu'un utilisateur n'a pas été validé manuellement par un administrateur (ou bien par un système de karma). Les nouveaux utilisateurs pourraient donc poster sans problèmes, mais ne pourraient pas détourner le système pour faire leur référencement (des liens non-actifs, voir lien remplacé par un "lien interdit" dans des commentaires sur des posts vieux de plusieurs mois n'ont pas un grand intérêt pour ces spammeurs). Si des dev. de Tuleap m'entendent, je m’apprête à migrer ma forge vers Tuleap et j'espère qu'il y a / aura des mécanismes de défense contre le spam dans Tuleap :-)
Mathias
# Dépèche très intéressante, merci !
Posté par robin . Évalué à 2.
Plus que deux commentaires comme celui-là et je peux spammer :)
bépo powered
[^] # Re: Dépèche très intéressante, merci !
Posté par Ysabeau 🧶 (site web personnel, Mastodon) . Évalué à 4.
Ah ah, on ne se laissera pas avoir et l'équipe de modération sera sans pitié !
« Tak ne veut pas quʼon pense à lui, il veut quʼon pense », Terry Pratchett, Déraillé.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.