J'essaie de trouver un mécanisme anti-spam suffisamment bon pour empêcher les entrées générées automatiquement. J'ai lu ces techniques comme le captcha, 1 + 1 =? les trucs fonctionnent bien, mais ils présentent également une étape supplémentaire empêchant l'utilisation rapide et gratuite de l'application (je ne cherche rien de tel s'il vous plaît).
J'ai essayé de définir certains champs cachés dans tous mes formulaires, avec display: none;
Cependant, je suis certain qu'un script peut être configuré pour suivre cet identifiant de champ de formulaire et simplement ne pas le remplir.
Avez-vous mis en œuvre / connaissez-vous une bonne méthode anti-robots de remplissage automatique de formulaires? Y a-t-il quelque chose qui peut être fait de manière transparente avec le traitement côté serveur HTML ET / OU, et être (presque) à l'épreuve des balles? (sans JS car on pourrait simplement le désactiver).
J'essaie de ne pas me fier aux sessions pour cela (c'est-à-dire en comptant le nombre de clics sur un bouton pour éviter les surcharges).
Réponses:
Un moyen facile à mettre en œuvre mais pas infaillible (en particulier sur les attaques «spécifiques») de résoudre les anti-spam consiste à suivre le temps entre la soumission du formulaire et le chargement de la page.
Les robots demandent une page, analysent la page et soumettent le formulaire. C'est rapide.
Les humains saisissent une URL, chargent la page, attendent que la page soit complètement chargée, défilent vers le bas, lisent le contenu, décident de commenter / remplir le formulaire, ont besoin de temps pour remplir le formulaire et soumettre.
La différence de temps peut être subtile; et comment suivre ce temps sans cookies nécessite une certaine manière de base de données côté serveur. Cela peut avoir un impact sur les performances.
Vous devez également modifier le seuil de temps.
la source
En fait, je trouve qu'un simple champ Honey Pot fonctionne bien. La plupart des robots remplissent tous les champs de formulaire qu'ils voient, dans l'espoir de contourner les validateurs de champs requis.
http://haacked.com/archive/2007/09/11/honeypot-captcha.aspx
Si vous créez une zone de texte, masquez-la en javascript, puis vérifiez que la valeur est vide sur le serveur, cela élimine 99% des robots et ne cause aucune frustration à 99% de vos utilisateurs . Les 1% restants dont le javascript est désactivé verront toujours la zone de texte, mais vous pouvez ajouter un message comme "Laissez ce champ vide" pour ces cas (si vous vous en souciez du tout).
(De plus, en notant que si vous faites style = "display: none" sur le terrain, alors il est trop facile pour un robot de simplement voir cela et de rejeter le champ, c'est pourquoi je préfère l'approche javascript).
la source
Et si - le Bot n'en trouve pas
form
du tout?3 exemples:
Créez un
form.html
et placez votre à l'form
intérieur d'un<div id="formContainer">
élément.À l'intérieur de la page où vous devez appeler ce formulaire, utilisez un vide
<div id="dynamicForm"></div>
et ce jQuery:$("#dynamicForm").load("form.html #formContainer");
$_POST["email"]
soit vide (sans aucune valeur)! Sinon, ne soumettez pas le formulaire.<input name="sender" type="text" placeholder="Your email">
après (!) Le « bot-appât » entrée pour l'utilisateur réelle adresse e - mail.Remerciements:
Developer.Mozilla - Désactivation de la saisie semi- automatique des formulaires
StackOverflow - Ignorer Tabindex
la source
autocomplete=nope
serait par défauton
;-) MDN: input # attr-autocompleteautocomplete="oh sunny day"
d'ailleurs.Ce que j'ai fait, c'est d'utiliser un champ caché et de mettre l'horodatage dessus, puis de le comparer à l'horodatage sur le serveur en utilisant PHP.
Si c'était plus rapide que 15 secondes (dépend de la taille de vos formulaires), c'était un bot.
J'espère que cette aide
la source
$.post
tout envoyer vers un fichier php externe. 3) en php externe, obtenir à nouveau l'heure du serveur et la comparer avec l'heure de la session?Un moyen très efficace d'éliminer virtuellement le spam est d'avoir un champ de texte qui contient du texte tel que "Supprimer ce texte pour soumettre le formulaire!" et ce texte doit être supprimé afin de soumettre le formulaire.
Lors de la validation du formulaire, si le champ de texte contient le texte d'origine, ou tout autre texte aléatoire d'ailleurs, ne soumettez pas le formulaire. Les robots peuvent lire les noms de formulaires et remplir automatiquement les champs Nom et E-mail, mais ne savent pas s'ils doivent réellement supprimer du texte d'un certain champ pour pouvoir le soumettre.
J'ai implémenté cette méthode sur notre site Web d'entreprise et cela a totalement éliminé le spam que nous recevions quotidiennement. Ça marche vraiment!
la source
Que diriez-vous de créer une zone de saisie de champ de texte de la même couleur que l'arrière-plan qui doit rester vide. Cela contournera le problème de l'affichage de la lecture d'un bot: aucun
la source
http://recaptcha.net/reCAPTCHA est un service antibot gratuit qui aide à numériser des livres
Il a été acquis par Google (en 2009):
Regarde aussi
la source
Beaucoup de ces robots anti-spam ne sont que des scripts côté serveur qui rôdent sur le Web. Vous pouvez combattre beaucoup d'entre eux en utilisant du javascript pour manipuler la demande de formulaire avant son envoi (c'est-à-dire en définissant un champ supplémentaire basé sur une variable client). Ce n'est pas une solution complète et peut entraîner de nombreux problèmes (par exemple, les utilisateurs sans JavaScript, sur les appareils mobiles, etc.), mais cela peut faire partie de votre plan d'attaque.
Voici un exemple trivial ...
Quelque part dans votre script php ...
De plus, les captchas sont excellents et constituent vraiment la meilleure défense contre le spam.
la source
Je suis surpris que personne n'ait encore mentionné cette méthode:
Avantages:
Les inconvénients:
Par exemple, cette méthode est utilisée par le plugin WordPress Cookies for Comments .
la source
Avec l'émergence de navigateurs headless (comme phantomjs) qui peuvent émuler n'importe quoi, vous ne pouvez pas supposer que:
Si c'était vrai, ce n'est plus vrai.
Si vous ne voulez pas de solution conviviale, donnez-leur simplement un beau bouton d' envoi "Je suis un spammeur" :
Bien sûr, vous pouvez jouer avec deux
input[type=image]
boutons d' image , en changeant l'ordre après chaque chargement, les alternatives de texte, le contenu des images (et leur taille) ou lename
des boutons; ce qui nécessitera un certain travail de serveur.Pour des raisons d'accessibilité, vous devez mettre une alternative textuelle correcte, mais je pense qu'une longue phrase est meilleure pour les utilisateurs de lecteurs d'écran que d'être considérée comme un bot.
Note supplémentaire: ces exemples illustrent que comprendre l'anglais (ou n'importe quelle langue), et devoir faire un choix simple, est plus difficile pour un spambot que: attendre 10 secondes, manipuler CSS ou javascript, savoir qu'un champ est caché, émuler un mouvement de souris ou émulation de la saisie au clavier, ...
la source
Un moyen très simple consiste à fournir certains champs comme
<textarea style="display:none;" name="input"></textarea>
et à supprimer toutes les réponses qui ont rempli ce champ .Une autre approche consiste à générer le formulaire entier (ou juste les noms de champs) en utilisant Javascript; peu de robots peuvent l'exécuter.
Quoi qu'il en soit, vous ne ferez pas grand-chose contre les «bots» vivants de Taiwan ou d'Inde, qui sont payés 0,03 $ par lien publié, et qui gagnent leur vie de cette façon.
la source
J'ai une approche simple pour arrêter les spammeurs qui est efficace à 100%, du moins d'après mon expérience, et évite l'utilisation de reCAPTCHA et des approches similaires. Je suis passé de près de 100 spams par jour sur l'un des formulaires html de mes sites à zéro au cours des 5 dernières années une fois que j'ai implémenté cette approche.
Il fonctionne en tirant parti des capacités d'e-mail ALIAS de la plupart des scripts de gestion de formulaires html (j'utilise FormMail.pl), avec un "code" de soumission graphique, qui est facilement créé dans le plus simple des programmes graphiques. Un de ces graphiques comprend le code M19P17nH et l'invite «Veuillez entrer le code à gauche».
Cet exemple particulier utilise une séquence aléatoire de lettres et de chiffres, mais j'ai tendance à utiliser des versions non anglaises de mots familiers à mes visiteurs (par exemple "pnofrtay"). Notez que l'invite pour le champ de formulaire est intégrée au graphisme, plutôt que d'apparaître sur le formulaire. Ainsi, pour un robot, ce champ de formulaire ne présente aucun indice quant à son objectif.
La seule vraie astuce ici est de s'assurer que votre formulaire html attribue ce code à la variable "destinataire". Ensuite, dans votre programme de messagerie, assurez-vous que chaque code que vous utilisez est défini comme un alias de messagerie, qui pointe vers les adresses de messagerie que vous souhaitez utiliser. Puisqu'il n'y a aucune invite d'aucune sorte sur le formulaire pour un robot à lire et aucune adresse e-mail, il n'a aucune idée de ce qu'il faut mettre dans le champ de formulaire vierge. S'il ne met rien dans le champ de formulaire ou quoi que ce soit sauf des codes acceptables, la soumission du formulaire échoue avec une erreur "mauvais destinataire". Vous pouvez utiliser un graphique différent sur différents formulaires, bien que ce ne soit pas vraiment nécessaire dans mon expérience.
Bien sûr, un être humain peut résoudre ce problème en un éclair, sans tous les problèmes associés à reCAPTCHA et à des schémas similaires, plus élégants. Si un spammeur humain répond à l'échec du destinataire et programme le code d'image dans le robot, vous pouvez le modifier facilement, une fois que vous vous rendez compte que le robot a été codé en dur pour répondre. En cinq ans d'utilisation de cette approche, je n'ai jamais reçu de spam provenant d'aucun des formulaires sur lesquels je l'utilise et je n'ai jamais eu de plainte d'un utilisateur humain des formulaires. Je suis certain que cela pourrait être battu avec la capacité OCR dans le robot, mais je ne l'ai jamais fait sur aucun de mes sites qui utilisent des formulaires html. J'ai également utilisé des "pièges anti-spam" (code html "come hither" caché qui pointe vers mes politiques anti-spam) à bon escient, mais ils n'étaient efficaces qu'à environ 90%.
la source
Je pense à beaucoup de choses ici:
la source
Une autre option au lieu de faire des lettres et des chiffres aléatoires comme le font de nombreux sites Web, est de faire des images aléatoires d'objets reconnaissables. Ensuite, demandez à l'utilisateur de saisir la couleur de quelque chose dans l'image ou l'objet lui-même.
Dans l'ensemble, chaque solution aura ses avantages et ses inconvénients. Vous allez devoir trouver une médiane heureuse entre le fait que les utilisateurs aient trop de mal à passer le mécanisme antispam et le nombre de robots de spam qui peuvent passer.
la source
Les robots ne peuvent pas exécuter JavaScript, vous faites donc quelque chose comme injecter une sorte d'élément caché dans la page avec JavaScript, puis détecter sa présence avant la soumission du formulaire, mais méfiez-vous car certains de vos utilisateurs auront également JavaScript désactivé
Sinon, je pense que vous serez obligé d'utiliser une forme de preuve client "d'humanité"
la source
La meilleure solution que j'ai trouvée pour éviter d'être spammé par des robots consiste à utiliser une question ou un champ très trivial sur votre formulaire.
Essayez d'ajouter un champ comme celui-ci:
Ces astuces nécessitent que l'utilisateur comprenne ce qui doit être saisi sur le formulaire, ce qui rend beaucoup plus difficile d'être la cible d'un remplissage massif de formulaires par des robots.
ÉDITER
L'arrière de cette méthode, comme vous l'avez indiqué dans votre question, est l'étape supplémentaire pour l'utilisateur de valider son formulaire. Mais, à mon avis, c'est beaucoup plus simple qu'un captcha et la surcharge lors du remplissage du formulaire ne dépasse pas 5 secondes, ce qui semble acceptable du point de vue de l'utilisateur.
la source
Il y a un tutoriel à ce sujet sur le site JQuery. Bien que ce soit JQuery, l'idée est indépendante du framework.
Si JavaScript n'est pas disponible, vous devrez peut-être revenir à l'approche de type CAPTCHA.
la source
le moyen le plus simple que j'ai trouvé pour le faire est de mettre un champ avec une valeur et de demander à l'utilisateur de supprimer le texte de ce champ. puisque les bots ne font que les remplir. si le champ n'est pas vide, cela signifie que l'utilisateur n'est pas humain et qu'il ne sera pas publié. c'est le même but d'un code captcha.
la source
C'est juste une idée, je l'ai utilisé dans mon application et fonctionne bien
vous pouvez créer un cookie sur le mouvement de la souris avec javascript ou jquery et vérifier côté serveur si le cookie existe, car seuls les humains ont la souris, le cookie ne peut être créé que par eux le cookie peut être un horodatage ou un jeton qui peut être validé
la source
Utilisez 1) formulaire avec jetons 2) formulaire de vérification pour former un retard avec l'adresse IP 3) Bloquer IP (facultatif)
la source
D'après mon expérience, si le formulaire n'est qu'un formulaire de «contact», vous n'avez pas besoin de mesures spéciales. Le spam est correctement filtré par les services de messagerie Web (vous pouvez suivre les demandes de formulaires Web via des scripts de serveur pour voir ce qui parvient efficacement à votre courrier électronique, bien sûr, je suppose que vous avez un bon service de messagerie Web: D)
Je ne pense pas que ce soit une bonne chose, en effet, ce que je veux, c'est recevoir des courriels d'utilisateurs qui font une action particulière parce que ce sont les utilisateurs qui m'intéressent (par exemple, les utilisateurs qui ont consulté la page "CV" et utilisé le bon contact forme). Donc, si l'utilisateur fait quelque chose que je veux, je commence à suivre sa session et à définir un cookie (je configure toujours un cookie de session, mais lorsque je ne démarre pas une session, c'est juste un faux cookie fait croire que l'utilisateur a une session). Si l'utilisateur fait quelque chose de indésirable, je ne prends pas la peine de garder une session pour lui donc pas de surcharge, etc.
Aussi, ce serait bien pour moi que les services de publicité offrent une sorte d'API (peut-être qui existe déjà) pour voir si l'utilisateur "a regardé l'annonce", il est probable que les utilisateurs qui regardent les publicités soient de vrais utilisateurs, mais s'ils ne le sont pas vraiment bien au moins vous obtenez 1 vue de toute façon donc rien de perte. (et croyez-moi, les contrôles publicitaires sont plus sophistiqués que tout ce que vous pouvez faire seul)
la source
En fait, le piège avec affichage: aucun ne fonctionne comme un charme. Cela permet de déplacer la déclaration CSS vers un fichier contenant des feuilles de style globales, ce qui obligerait les robots de spam à les charger également (une déclaration directe style = "display: none;" pourrait probablement être interprétée par un robot de spam, tout comme un déclaration de style local dans le document lui-même).
Cela, combiné à d'autres contre-mesures, devrait rendre inutile le déchargement de tout spam bots (j'ai un livre d'or sécurisé avec une variété de mesures, et jusqu'à présent, ils sont tombés dans mes pièges principaux - cependant, si un bot les contournait, là sont d'autres prêts à déclencher).
Ce que j'utilise est une combinaison de faux champs de formulaire (également décrits comme des champs non valides dans le cas où un navigateur est utilisé qui ne gère pas CSS en général ou n'affiche pas: aucun en particulier), des vérifications de cohérence (c'est-à-dire le format de l'entrée valide?), horodatage (soumissions trop rapides et trop lentes), MySQL (pour la mise en œuvre de listes noires basées sur des adresses e-mail et IP ainsi que des filtres d'inondation), DNSBL (par exemple le SBL + XBL de Spamhaus), analyse de texte ( par exemple, des mots qui sont une forte indication de spam) et des e-mails de vérification (pour déterminer si l'adresse e-mail fournie est valide ou non).
Une note sur les mails de vérification: cette étape est entièrement facultative, mais quand on choisit de la mettre en œuvre, ce processus doit être aussi simple que possible à utiliser (c'est-à-dire qu'il doit se résumer à cliquer sur un lien contenu dans l'e-mail ) et faire en sorte que l'adresse e-mail en question soit ajoutée à la liste blanche pendant un certain temps afin d'éviter les vérifications ultérieures au cas où l'utilisateur souhaiterait publier des messages supplémentaires.
la source
J'utilise une méthode où il y a une zone de texte cachée. Puisque les robots analysent le site Web, ils le remplissent probablement. Ensuite, je vérifie s'il est vide s'il ne s'agit pas de retour de site Web.
Ajoutez une vérification par e-mail. L'utilisateur reçoit un e-mail et il doit cliquer sur un lien. Sinon, supprimez le message dans un certain temps.
la source
J'ai ajouté un contrôle horaire à mes formulaires. Les formulaires ne seront pas soumis s'ils sont remplis en moins de 3 secondes et cela fonctionnait très bien pour moi, en particulier pour les formulaires longs. Voici la fonction de vérification de formulaire que j'appelle sur le bouton d'envoi
la source
Avec des robots anti-spam de plus en plus sophistiqués et des techniques telles que les navigateurs automatisés, il deviendra plus difficile de déterminer la source du spam. Mais qu'il soit publié par un logiciel, un humain ou les deux, le spam est un spam en raison de son contenu. Je pense que la meilleure solution est d'exécuter le contenu publié via une API anti-spam comme Cleantalk ou Akismet. C'est relativement bon marché et efficace et ne dérange pas l'utilisateur. Vous pouvez vérifier les heures de soumission des formulaires et les autres vérifications traditionnelles pour les robots moins sophistiqués avant de frapper l'API.
la source
Vous pouvez essayer de tromper les robots de spam en ajoutant l'attribut d'action correct après la validation Javascript. Si le robot bloque Javascript, il ne pourra jamais soumettre le formulaire correctement.
HTML
JAVASCRIPT
J'ajoute ensuite un "callback" après .attr () pour éviter les erreurs.
la source
Juste ma valeur de cinq cents. Si le but de cela est d'arrêter 99% des robots, ce qui sonne plutôt bien, et si 99% des robots ne peuvent pas exécuter Java-script, la meilleure solution qui bat tout est simplement de ne pas utiliser un formulaire qui a une action de soumission avec une URL de publication.
Si le formulaire est contrôlé via java-script et que le java-script recueille les données du formulaire puis les envoie via une requête HTTP, aucun robot ne peut soumettre le formulaire. Étant donné que le bouton d'envoi utiliserait Java-script pour exécuter le code qui envoie le formulaire.
la source