11526 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous, je travaille actuellement sur un petit projet de jeu scientifique assez intime qui ne concernera qu'une dizaine de personnes grand max. En soit, il ne sera pas publié ou communiqué. Néanmoins, je crains que quelqu'un tape le nom dans la barre de recherche Google et que cela référence le site d'une manière ou d'une autre (que ca permette à Google de le découvrir, en fait) et qu'à partir de là, les bots s'en donnent à cœur joie.

Sur le minisite, impossible de modifier quoi que ce soit, on peut juste ajouter des données, ces dernières constituant la base de donnée du projet de recherche. Les données ne s'écrasent pas, aucun système de compte ou d'utilisateur, les participants sont anonymes.

Je réfléchis à un moyen très simple et sans action utilisateur pour bloquer les bots potentiels. Une sécurité par obscurité en somme.

Est-ce qu'un setTimeout en JS de 100ms qui délaye l'affichage d'un élément clé, comme le formulaire entier serait efficace ?
Sachant que de fait extraire le dit formulaire du code HTML ne pose aucun problème. Le projet ne doit précisément pas être référencé.
salut
tu peut bloquer les robots avec un fichier robots.txt avec:
User-agent: *
Disallow: /


ou une balise html
<meta name="robots" content="noindex">


ou bloquer l'accès avec un mot de passe dans le fichier htaccess
Modifié par drphilgood (18 Feb 2024 - 17:20)
Je pensais plutôt aux robots malveillants, tu sais ceux qui te spamment tous les formulaires qu'ils trouvent pour dieu sais quelle raison (certainement trouver des accès non/mal sécurisés).

Et le code via .htaccess ce n'est pas une option car je réfléchis à une solution qui ne nécessite aucune action de l'utilisateur.
drphilgood a écrit :
ou une balise html
<meta name="robots" content="noindex">

Ici il s'agit avant tout d'une suggestion, suggestion que les robots sont libres de suivre ou non.
Olivier C a écrit :

Ici il s'agit avant tout d'une suggestion, suggestion que les robots sont libres de suivre ou non.


ah bon merci pour l'info.
Modérateur
Bonjour,
C@scou a écrit :
... aucun système de compte ou d'utilisateur, les participants sont anonymes.
S'il n'y a aucune information spécifique connue permettant d'identifier les utilisateurs fréquentant le site (identifiant, mot de passe, voire l'adresse IP de leur machine ou n'importe quoi d'autre), les robots pourront eux aussi fréquenter le site.

Mais si par exemple tu connais les adresses ip des participants, tu peux espérer ne laisser passer que ceux que tu connais.

Amicalement,
Bonsoir,

Tu ne pourras pas vraiment bloquer les bots si tu ne mets pas de mot de passe. Comme déjà dit, les robots.txt et autres balises ne sont que des suggestions, que les robots malveillants ne suivront évidemment pas.

L'autre moyen, si tu ne veux pas de mot de passe, c'est de compter sur la stupidité des bots. Tu dis que c'est un jeu scientifique. Donc tu dois pouvoir éliminer les données qui ne sont pas un minimum cohérentes. A moins que ce soit justement le but de l'étude...


Tu peux aussi bloquer plusieurs envois successifs en une trop courte période par la même IP, ou plusieurs envois à des intervalles trop réguliers. Mais attention, certains bots sont assez malins pour déterminer à quelle intervalle les données doivent être envoyées et y ajouter un petit facteur temps aléatoire pour passer, donc il ne faut pas compter que sur ça.

Même chose pour le champ pot de miel, ce n'est pas fiable à 100%.


C'est peut-être triste, mais donc si tu veux être tranquille, il n'y a pas 36 solutions, mets un mot de passe.
Salut

Si tu sais EXACTEMENT QUI va se connecter au site, que vous êtes une dizaine et que ça bouge pas trop d'ordi/tel, alors met en place une autorisation IP, une genre de whitelist et la tu es sur de bloquer l'accès à la terre entière sauf aux IP que tu autorises.
Modifié par JENCAL (20 Feb 2024 - 14:51)
C'est un jeu à but scientifique qui vise à constituer une base de donnée de traductions pour un dialecte local en voix d'extinction. Donc age moyen de l'utilisateur 80 ans. xD
D'où ma recherche de simplicité et le faible nombre de participants.

Je ne sais pas exactement qui va s'y connecter.

Et effectivement les données rentrées seront imprévisible. Vu qu'il s'agit de traduire des termes. Donc ca va du pronom à l'adjectif, des mots de longueur et de nature assez variable.
Le seul point prévisible sera l'absence de nombre. Mais ca m'oblige à miser sur le fait que les bots "tentent" les input avec des nombres en plus des lettre (comme pour fake un mot de passe complexe, en somme). Pourquoi pas mais ca me semble encore plus aléatoire.

Ah voila merci pour le rapprochement avec le champ pot de miel, je ne souvenais plus du tout de ce nom mais c'est un peu à ça que je pensais... en plus évolué.

D'où mon idée du setTimeout.
Le champ en question s'il n'est pas rempli correctement informe le serveur d'ignorer le POST.
Côté client un setTimeout remplit le champ après une seconde avec une valeur fixe.
Est-ce qu'à votre avis les bots exécutent les setTimeout en instant afin de court-circuiter ce genre de techniques ?

D'expérience j'ai souvent eu de bons résultats avec ce genre de techniques basées sur l'obscurité.

NB : Ce n'est pas la fréquentation du site que je cherche à empêcher, c'est détecter côté serveur si le formulaire a été envoyé par un humain ou par un bot.

Les données présentes sur le site en lui même ne sont pas confidentielles. C'est uniquement l'envoi du formulaire qui pose problème.

(merci à tous pour votre participation)
Modifié par C@scou (26 Feb 2024 - 19:51)
Modérateur
Bonjour,

Il ya des bots qui miment les comportements humains. Ça va jusqu'à entrainer le bot à reproduire des actions humaines comme par exemple déplacer la souris pas trop vite afin de berner les systèmes anti-bots les plus sophistiqués qui de leur côté se basent sur tout ce que fait l'utilisateur dans la page y compris donc les mouvements de souris, pour déterminer s'il s'agit d'un humain ou d'un bot. La course est sans fin.

Ce genre de bot passera ton épreuve du timeout sans problème me semble-t-il.

La question est de savoir s'ils vont effectivement venir sur ton site ou pas. Il faudrait essayer ton setTimeout pour voir ce que ça donne en pratique. Parce qu'en théorie, la réponse reste : "oui, il y a des bots qui passeront quoique tu fasses".

Amicalement,
Bon j'ai opté finalement pour une solution que je trouve élégante du point de vue [temps passé / efficacité], en gardant en tête que comme tu le dis, un bot un peu costaud passera de toute façon à travers.

-> Ma page initiale écrit dans un champ hidden le timestamp actuel.
-> Un timeout de 2s envoi ce timestamp à une page PHP via post.
-> Cette dernière compare la variable reçue et renvoi un emoji précis si et seulement si l'écart entre les deux timestamp est supérieur ou égal à 1 (une seconde, donc).
-> Le script JS récupère le retour (l'emoji) et remplace la valeur du champ hidden par ce dernier.
-> Lors du submit, le serveur regarde la valeur du champ et ne réagit que si le bon smiley est en valeur.

Donc un bot qui exécuterait instantanément tous les timeouts de la page ne passera pas à travers, pas plus qu'un bot qui ignore les timeouts.

Sachant qu'il n'est pas non plus exclu que les bots détectent les captcha et agissent en conséquence. Histoire de ne pas surcharger leur propre serveur en perdant du temps (et donc de l'argent) à fake une captcha Google qui serait absente du site.
Hors là le captcha est fait maison et ne sera pas identifié. Peut être qu'à ce moment là les bots appliquent une sorte de mode par défaut moins efficient ?
(je continue d'émettre des hypophyses, bien sur)

NB : Je me suis déjà battu contres bots par le passé avec une captcha maison (une classique cette fois ci, avec image générée en GD2). Je l'avais simplifiée afin de permettre aux profanes de la remplir juste à chaque fois, mais j'avais quelques dizaines de bots qui passaient à travers tous les mois. Après refonte et complexification notable, ca avait cessé.
(c'était il y a plus de 10 ans, ca a du bien changer depuis)
Modifié par C@scou (29 Feb 2024 - 17:39)