#IA #bots #protection
J'ai presque honte de publier un truc aussi trivial :
Une solution simple (stupide) mais efficace pour bloquer les bots.
https://sebsauvage.net/wiki/doku.php?id=stupidantibot

(Je vous assure, c'est choquant de voir la quantité de saloperies que ça bloque.)

@sebsauvage Ce genre de solution, ça me rappelle l'époque où je m'étais débarrassé de toutes les inscriptions-spam sur mon forum PHPBB juste en ajoutant un champ de confirmation de l'adresse e-mail. C'était tout con mais ça a assuré ma tranquillité pendant quelques années '^^

@Darathor @sebsauvage

Pour l'instant j'ai pas trop de souci mais je garde ta technique sous le coude, @sebsauvage :)

ça me rappelle cette histoire (ptet fausse) où des gens utilisaient des cannettes avec des bougies à l'intérieur pour tromper les missiles à têtes chercheuses :)

PS: pour info le système de commentaires sur mon blog (isso) marche exactement comme ça : un peu de JS et un cookie, et j'ai jamais eu de bot non plus

@sebsauvage "aucune boîte d'IA n'ira se donner la peine d'écrire un bout de code pour s'adapter à votre site" 👈️ Oui, et j'ajouterai comme conseil : faites votre propre variante de ce code, renommez les fonctions, les variables, juste pour leur compliquer encore plus la tâche.

@sebsauvage Sur le serveur Discord (oui, je sais) que je modère, on a rajouté un rôle « blip bloup, je suis un bot et veut me faire ban » après avoir vu que les bots prenaient tous le dernier rôle.

On en a choppé deux comme ça 😆

@sebsauvage @NuclearSquid

Sur notre Discord, on a créé un piège à bot : un chan spécifique où si quelqu’un poste malgré l’avertissement que seul les humains vont lire → ban instantané.
C’est nucléaire, mais c’est efficace.

@sebsauvage @minybolito c'est un peu dans ta problématique du moment !!
@tournesol @sebsauvage merci ! en effet ça à l'air fou ce truc ! par contre (je dis sûrement nimp) mais là c'est pour Apache et moi c'est nginx pour le serveur, je sais pas si y'a moyen de faire la même chose du coup
@minybolito
Quelqu'un dans les réponses a mis la config nginx.
@tournesol
@sebsauvage @tournesol oh j'avais pas vu merci !!!!!!!

@sebsauvage "Alors bien sûr cela va aussi bloquer les bots indexeurs des moteurs de recherche, mais de toute manière Google n'est déjà plus capable d'afficher des résultats pertinents et il n'amène plus de trafic."

T'as pas peur de disparaître des moteurs de recherche alternatifs (DuckDuckGo, Qwant, Kagi...) avec cette solution ? :/

@deuchnord
Bof, je crois que je m'en fous, en fait.
@deuchnord
Après si je veux être plus "fin" je peux relâcher le blocage et ne le mettre que sur certaines URLs (par exemple au lieu de le mettre sur /wiki, je le met uniquement sur les URLs du gestionnaire de médias DokuWiki, vu que c'est celui-à qu'ils ciblent, ou sur la recherche)
@sebsauvage @deuchnord
Au vu des résultats que donnent les "moteurs de recherche" actuellement...
:/

@deuchnord @sebsauvage pour info j'ai un vieux smartphone sur lequel j'utilise à 90 % un navigateur assez restrictif, monocles browser. Même avec les cookies d'activés, une fois que je clique, j'ai pas accès à ta page. Par contre avec chrome ça passe. Je te donne juste l'info t'en fais ce que tu veux 😉

Édit : si ça passe, j'avais mal activé les cookies.

@sebsauvage @deuchnord ouai c'était pas très utile mon commentaire 🤣
@sebsauvage tu as bien fait les mise en cache de tes pages aussi ? Un wiki ça doit pas beaucoup bouger, tu doit pouvoir mettre en cache les page demander pendant très longtemps, et soulager le backend de toutes ces requêtes. (Pour la partie accessible au public en tout cas)
@ztec
oui oui le cache de DokuWiki fonctionne très bien.
@sebsauvage mais il est côté wiki du coup ? Je parlais du cache "CDN" plus côté serveur web. Le cache docuwiki passe par du traitement php pour chaque requêtes même si elle est en cache non ? (Certe moins coûteux mais malgré tout présent)
@ztec
Ah je n'utilise pas de CDN ou de reverse-proxy qui fasse cache.
Je protège carrément tout ce qui est en dessous de /wiki
@sebsauvage un reverse proxy, même local, pourrais faire ce rôle de protection sur absolument tout. La seul condition est d'avoir de bon header cache défini. Et su coup tout ce qui est froid (qui change peu) te coûterais presque que la bande passante et un peu de stockage.
@ztec
Oui j'imagine bien, mais je n'ai pas vraiment la main système sur mon serveur.
@sebsauvage ah en effet. Compliqué dans ce cas.
@sebsauvage et tu peu utilisé simplement nginx pour ca

@sebsauvage Sauvé dans mon shaarli perso pour pouvoir m'y référer plus tard… et en tout cas ça bloque bien Shaarli aussi. 😁 J'ai dû taper la description à la main.

Merci en tout cas.

@sebsauvage C'est pas si trivial, moi par exemple, j'ai du mal à écrire des RewriteRule qui finissent pas à un moment ou à un autre, à me mordre les fesses 😅

@sebsauvage

Merci, ça fonctionne bien, je l'ai installé sur un de mes sites.

Et comme ça utilise #nginx à la place d'Apache, j'ai mis ça comme règle de réécriture :

-------------
location ~ [^/]\.php(/|$) {
# blabla
if ($http_cookie !~* "petitcookie=miam") {
rewrite ^ /antibot/index.html last;
}
-----------

Donc testé et approuvé !

@luginfo10
👍
Est-ce que tu permets que je reprenne cette config nginx pour compléter la page ?
@sebsauvage oui bien sûr (et pas besoin de créditer, va au plus simple ;))
@sebsauvage
Ce ne serait pas un dérivé manuel de la protection antibot que fait cloudflare?
@jenesuispersonne
Oh je pense que celle de CloudFlare est *beaucoup* plus évoluée.
(ça mélange suivi de l'historique avec examen des caractéristique du navigateur, comportement de la souris, et éventuellement mini-preuve de travail....)

@sebsauvage
## 2. J'ai fais un Honeypot Article "PAF" (Anti-Scraping)
Destiné aux crawlers sophistiqués et aux bots utilisant des proxies résidentiels qui contournent les blocages par User-Agent.

En gros, L'Appât est l'article.
il est invisible pour les humains (caché dans le footer), mais prioritaire dans le `sitemap.xml` pour attirer les bots.
C'est du Texte sémantique technique crédible pour paraître "précieux" aux yeux d'un scraper.

À l'intérieur de l'article, un lien d'appel à l'action pointe vers `/api/trap-trigger.php`.

Le script `trap-trigger.php` exécute la logique suivante :

Il vérifie si le User-Agent appartient à un bot légitime (Google, Bing, OAI-SearchBot).
Si un bot prétend être Googlebot, le script vérifie via `gethostbyaddr` que l'IP appartient bien au domaine `googlebot.com` ou `google.com`.
Bannissement & Rotation (Sliding Window)** :
- L'IP est enregistrée dans `.trap_log`.
- L'IP est injectée dans le `.htaccess`.

Pour éviter de ralentir le serveur, le système ne conserve que les **500 dernières IPs** bannies. Les plus anciennes sont automatiquement supprimées du `.htaccess` par rotation.

@mous_tik
Je vois l'idée.
Le truc c'est qu'avec les proxy résidentiels, les boîtes d'IA attaquent désormais avec des dizaines de milliers d'adresses IP différentes (cf. ce qui est arrivé à OpenStreetMap). Ça devient presque vain de faire des listes de blocage.
@sebsauvage ben on fait des 10aines de millier de listes de blocage et les gens qui acceptent de partager leurs co avec les sdk auront un web pourris. Leurs fautes merde.
@mous_tik
Ils ne le savent même pas.
@[email protected] @[email protected]
il faut mettre en place du rate-limiting par ip, ca se fait bien sur nginx ou sur haproxy (j'ai pas vérifier apache2 encore)
@oldsysops @mous_tik
oui, mais ça ne marche pas forcément bien.
Comme désormais les boites d'IP t'attaquent avec quelques dizaines de milliers d'adresses IP différentes (parfois une IP ne faisant qu'une seul requête), le rate-limiting par IP ne marche plus dans tous les cas.
@sebsauvage c'est encore plus basique et plus facile à contourner que anubis, autant utiliser anubis ?
@fredix
Je ne vois pas une seule boîte d'IA faire des efforts pour venir contourner spécifiquement mon petit site. Pour le moment la question ne se pose pas.
Pourquoi mettre Anubis (plus gros, plus d'impact sur les internautes) alors que mon bricolage fait très bien le taf ?
@fredix
Je veux dire : si une boîte d'IA est assez conne pour venir me demander 200 fois une même URL qui fait un 404, je les vois mal dépenser de l'énergie pour venir contourner ma petite protection.
@sebsauvage bah si c'est juste cliquer sur un bouton il n'y a rien de spécifique à ton site ? Ou j'ai pas compris
@fredix
Aucun bot ne clique. Donc ils ne passent pas. C'est justement l'idée.
@sebsauvage ca me parait trivial à faire en sorte que le bot clic ?
@fredix
Oui c'est trivial. MAIS ILS NE CLIQUENT JAMAIS.
Du coup ça fait exactement ce qu'on veut : les bots ne passent pas. 🤷‍♂️
@sebsauvage okok 😉 pour du court terme pourquoi pas
@fredix
Vu qu'ils sont assez cons pour me demander 200 fois par jour une URL qui fait un 404, je les vois mal commencer à réfléchir à contourner la protection d'un "petit" site comme le miens.
@sebsauvage tout dépend de l'adoption de cette solution. Si elle est massive elle sera contournée. La différence avec anubis est qu'il ne mise pas sur une implémentation ou pas en js mais sur l'obligation à faire un calcul qui est trop coûteux à faire par les bots.
@fredix
Oui. Mais je ne m'attends pas à ce que mon implémentation devienne assez populaire.
@fredix @sebsauvage Anubis n’est pas vraiment coûteux pour les bots. Ça marche parce qu’il faut exécuter du javascript avec des webworkers mais avoir à passer un seul test de CPU et avoir accès à toutes les pages c’est vraiment négligeable. Je crois que c’est cet article où quelqu’un avait fait le calcul: https://lock.cmpxchg8b.com/anubis.html

En général du Proof-of-Work je ne sais pas si c’est possible d’avoir quelque chose qui ne soit pas très énervante pour les utilisateurs (en particulier si on veut utiliser du matériel peu puissant comme un vieux téléphone ou quelque chose comme ça), tout en ajoutant vraiment du coût aux entreprises qui veulent le contourner.
Anubis.

@BetaRays certes le calcul à faire est négligeable pour 1 site mais pour des milliers ou plus ce n'est plus la même échelle.  @sebsauvage
@fredix @sebsauvage Ça reste un seul calcul pour accéder à toutes les pages du site, ça ne me semble pas si intéressant que ça.
@BetaRays sur des milliers de sites c'est des milliers de calculs sur les serveurs du bot. @sebsauvage

@sebsauvage Simple et basique comme on aime :)

Tant que ça marche bien comme ça je ne vois pas l'utilité de mettre en place des solutions plus complexes.

@fmasy
Pour le moment, les bots n'ont pas l'air de passer.
S'ils commencent à essayer de feinter, on verra (mais je n'y crois pas).