web-dev-qa-db-fra.com

Prévention de la soumission du formulaire bot

J'essaie de trouver un bon moyen d'empêcher les robots de soumettre mon formulaire, tout en simplifiant le processus. J'ai lu plusieurs bonnes idées, mais j'ai pensé ajouter une option de confirmation lorsque le formulaire est soumis. L'utilisateur clique sur soumettre et un message de confirmation Javascript s'affiche, ce qui nécessite une interaction de l'utilisateur.

Est-ce que cela empêcherait les robots ou un bot pourrait-il comprendre cela trop facilement? Ci-dessous, le code et JSFIddle pour illustrer mon idée:

JSFIDDLE

$('button').click(function () {
  if(Confirm()) {
    alert('Form submitted');
    /* perform a $.post() to php */
  }
  else {
    alert('Form not submitted');
  }
});

function Confirm() {
  var _question = confirm('Are you sure about this?');
  var _response = (_question) ? true : false;
  return _response;
}
22
Mike

Aujourd'hui, j'ai arrêté avec succès le spamming continu de mon formulaire. Bien sûr, cette méthode ne fonctionnait pas toujours, mais elle était simple et fonctionnait bien pour ce cas particulier. 

J'ai fait ce qui suit: 

  • Je règle la propriété action du formulaire sur mustusejavascript.asp , qui indique simplement que la soumission n'a pas fonctionné et que le visiteur doit activer le javascript.

  • Je règle la propriété onsubmit du formulaire sur une fonction javascript qui définit la propriété action du formulaire sur la page de réception réelle, comme receivemessage.asp

Apparemment, le bot en question ne gère pas javascript, je ne vois donc plus de spam. Et pour un humain (qui a activé le javascript), cela fonctionne sans aucun inconvénient ni interaction supplémentaire. Si le visiteur a désactivé le javascript, il recevra un message clair à ce sujet s'il fait une soumission.

4
Magnus

Votre code n'empêcherait pas la soumission de bot mais ce n'est pas à cause de la façon dont votre code est. Le bot typique présentera probablement une demande externe/automatisée POST à l'URL (attribut action). Les robots typiques ne rendent pas HTML, CSS ou JavaScript. Ils lisent le code HTML et agissent en conséquence, ainsi aucune logique client ne sera exécutée. Par exemple, CURLing une URL obtiendra le balisage sans charger ni évaluer de code JavaScript. Vous pouvez créer un script simple qui recherche <form>, puis effectue un CURL POST sur cette URL avec les clés correspondantes.

Dans cet esprit, une solution côté serveur pour empêcher la soumission de bot est nécessaire. Captcha + CSRF devrait suffire. ( http://en.wikipedia.org/wiki/Cross-site_request_forgery )

3
Matt Lo

Vous pouvez simplement ajouter captcha à votre formulaire. Comme les captchas seront different et également dans images, les bots ne peuvent pas decode cela. C’est l’une des sécurités les plus utilisées pour tous les sites Web ...

2
Hari krishnan

vous ne pouvez pas atteindre votre objectif avec javascript. car un client peut analyser votre javascript et contourner vos méthodes. Vous devez effectuer une validation côté serveur via des captchas. L'idée principale est de stocker un secret du côté serveur et de valider le formulaire envoyé par le client avec le secret du côté serveur.

2
oguzhanyalcin

Non vraiment pensez-vous toujours que Captcha ou ReCap sont sûrs?

Les Bots nowDays sont intelligents et peuvent facilement reconnaître des lettres sur des images en utilisant des outils de ROC (chercher pour comprendre)

Je dis que le meilleur moyen de se protéger contre la soumission automatique de formulaires consiste à ajouter un hachage masqué généré (et stocké sur la session sur votre serveur du client actuel) chaque fois que vous affichez le formulaire à soumettre! 

C'est tout ce que le bot ou un zombie soumet le formulaire que vous vérifiez si le hachage indiqué est égal à la session Hash stockée;)

pour plus d'informations Lisez à propos deCSRF!

2
ucefkh

Vous pouvez mesurer le temps d'inscription offert sans avoir besoin de remplir l'éternité pour les zones de texte!

1
Mikatsu

J'ai rencontré une validation de saisie de formulaire qui empêchait la saisie par programmation de s'inscrire.

Ma tactique initiale consistait à saisir l'élément et à le régler sur l'option de mon choix. J'ai déclenché le focus sur les champs de saisie et simulé des clics sur chaque élément pour faire apparaître les menus déroulants, puis défini la valeur déclenchant les événements pour modifier les valeurs. mais quand j'ai essayé de cliquer sur enregistrer les entrées où ne sont pas enregistrées comme ayant changé.

    ;failed automation attempt because window doesnt register changes.
    ;$iUse = _IEGetObjById($nIE,"InternalUseOnly_id")
    ;_IEAction($iUse,"focus")        
    ;_IEAction($iUse,"click")
    ;_IEFormElementOptionSelect($iUse,1,1,"byIndex")
    ;$iEdit = _IEGetObjById($nIE,"canEdit_id")
    ;_IEAction($iEdit,"focus")
    ;_IEAction($iEdit,"click")
    ;_IEFormElementOptionSelect($iEdit,1,1,"byIndex")
    ;$iTalent = _IEGetObjById($nIE,"TalentReleaseFile_id")
    ;_IEAction($iTalent,"focus")
    ;_IEAction($iTalent,"click")
    ;_IEFormElementOptionSelect($iTalent,2,1,"byIndex")
    ;Sleep(1000)
    ;_IEAction(_IETagNameGetCollection($nIE,"button",1),"click")

Cela m'a amené à repenser la manière dont l'entrée pourrait être entrée en manipulant directement les actions de la souris pour simuler davantage de sélection avec un comportement de type souris. Inutile de dire que je n'aurai pas à télécharger manuellement les images 1 à 1 pour mettre à jour les images de produits des entreprises. utilisé le numéro de Windows avant les lettres pour avoir mon script à la fin du répertoire et lorsque la fenêtre de téléchargement d'image s'ouvre, je dois utiliser l'accessibilité active pour obtenir le syslistview à partir de la fenêtre et sélectionner le 2ème élément qui est une image, le 1er élément est un dossier . ou le premier élément d'un findfirstfile renvoie uniquement l'appel de fichiers. J'utilise le nom pour rechercher l'élément dans une base de données d'éléments, puis accéder à ces éléments et mettre à jour quelques attributs après le téléchargement des images, puis je déplace le fichier de ce dossier dans un autre dossier afin qu'il ne soit plus traité, déplacez-vous sur le premier fichier suivant de la liste et bouclez jusqu'à ce que le nom du script soit trouvé à la fin de la mise à jour.

Il suffit de partager comment une personne de saisie de données modeste permet de gagner du temps et de lutter contre toutes ces vérifications de validation des formulaires malveillants.

Cordialement.

Bonnes idées. 

Il ya quelque temps, j'ai supprimé re-captcha, convertissant mon contactform.html en contactform.asp et l'ajoutant en haut (évidemment, avec du code entre les deux pour remplir complètement quelques fonctions telles que sendmail, vérifier que le formulaire est bien rempli, etc.).

    <%
     if Request.Form("Text") = 8 then
        dothis
      else
        send them to google.com
     end if
   %>

Sur le formulaire, j'ai collé un champ de texte de base avec le nom text afin que son apparence ressemble à quoi que ce soit ne spécifiant pas pour quoi que ce soit, j'ai ensuite collé du texte 2 lignes ci-dessus en rouge qui indique ce que 2 + 6 = dans la zone en dessous de soumettez votre demande.

0
FenceGuy

Il s'agit d'une version très courte qui n'a pas échoué depuis sa mise en œuvre sur mes sites il y a 4 ans, avec des écarts supplémentaires au besoin. Cela peut être construit avec toutes les variables et les instructions if else dont vous avez besoin

    function spamChk() {
    var ent1 = document.MyForm.Email.value
    var str1 = ent1.toLowerCase();
    if (str1.includes("noreply")) {
    document.MyForm.reset();
    }

<input type="text" name="Email" oninput="spamChk()">

En fait, je suis venu ici aujourd'hui pour savoir comment rediriger certaines adresses IP de bot bot vers H E L L .. juste pour le plaisir

0
Kickenback61