IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Empêcher les click() automatiques


Sujet :

jQuery

  1. #1
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut Empêcher les click() automatiques
    Bonjour,

    J'ai un petit soucis de "conception".
    Je réalise une page web, tout ce qu'il y a de plus basique, avec une question et 4 réponses possibles.
    J'aimerais m'assurer que le clic sur l'une des réponses est bien faite par un utilisateur et non par un script.

    Du coup, je me demande s'il y a une possibilité de désactiver de manière fiable la possibilité de jouer la méthode "click()" d'un élément ?

    L'ajout de Captcha n'étant pas une solution fiable (les robots arrivant désormais à lire ces derniers mieux que nous )

    J'ai beau creuser dans tous les sens, je n'arrive pas à trouver de solution à mon problème, d'où ma question, qui est un peu la solution la moins "dégueulasse".

    Merci d'avance pour vos retours.
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  2. #2
    Membre éclairé Avatar de Geoffrey74
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 515
    Points : 760
    Points
    760
    Par défaut
    Question bête, pourquoi ne pas demander de recopier la bonne réponse ?

    Sinon tu as le doubleclick mais pas dispo sur smartphone et tablette.

  3. #3
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonjour

    On peut regarder la structure de l'événement, voir : http://api.jquery.com/category/events/event-object/

    event.which also normalizes button presses (mousedown and mouseupevents), reporting 1 for left button, 2 for middle, and 3 for right. Use event.which instead of event.button.
    event.originalEvent contient tous les renseignements voir les outils du développeur dans Chrome ou Firefox.

    Exemple :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <button id="btn01">Btn 1</button>
    <button id="btn02">Btn 2</button>
    <button id="btn03">Btn 3</button>
    <button id="btn04">Btn 4</button>

    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $( function(){
     
        $( "[id^='btn0']" ).on( "click", function( event ){
            console.log( event.which, event.originalEvent );
        });
     
        setTimeout( function(){
            $( "#btn02" ).trigger( "click" );
        }, 2000);
     
        setTimeout( function(){
            $( "#btn01" ).trigger( "click" );
        }, 4000);
     
    });

    trigger() produira le résultat : undefined undefined
    alors qu'un mouseclick produira : 1 [object MouseEvent]

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Alors c'est peut-être moi qui comprends pas, mais, à partir du moment où on veut se prémunir des gens qui auraient programmé leur bot pour passer le captcha,

    Qu'est-ce qui les oblige à faire du JavaScript et tenir compte du JavaScript du site ? Le bot a qu'à envoyer les réponses qui lui chantent par requête HTTP, sans aucun clic, sans aucun JavaScript.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    J'ai uniquement répondu à la question : comment peut-on distinguer un événement "mouse click" et d'un trigger( "click" ) ?

    Pour les questions de sécurité, il faut voir les experts : http://www.developpez.net/forums/f81...-web/securite/

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  6. #6
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    Citation Envoyé par Geoffrey74 Voir le message
    Question bête, pourquoi ne pas demander de recopier la bonne réponse ?

    Sinon tu as le doubleclick mais pas dispo sur smartphone et tablette.
    Parce que copier la réponse, c'est aussi faisable en JS, donc mordage de queue
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  7. #7
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Alors c'est peut-être moi qui comprends pas, mais, à partir du moment où on veut se prémunir des gens qui auraient programmé leur bot pour passer le captcha,

    Qu'est-ce qui les oblige à faire du JavaScript et tenir compte du JavaScript du site ? Le bot a qu'à envoyer les réponses qui lui chantent par requête HTTP, sans aucun clic, sans aucun JavaScript.
    Parce que là, des vérifications peuvent être fait, c'est un bot qui enverrait la réponse et non plus mon serveur.
    Donc je peux déceler qq chose.
    Si c'est mon serveur qui m'envoie la réponse comme n'importe quel autre utilisateur, comment savoir si c'est un utilisateur ou un JS qui a cliqué ?
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  8. #8
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    Citation Envoyé par danielhagnoul Voir le message
    Bonjour

    On peut regarder la structure de l'événement, voir : http://api.jquery.com/category/events/event-object/



    event.originalEvent contient tous les renseignements voir les outils du développeur dans Chrome ou Firefox.

    Exemple :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <button id="btn01">Btn 1</button>
    <button id="btn02">Btn 2</button>
    <button id="btn03">Btn 3</button>
    <button id="btn04">Btn 4</button>

    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $( function(){
     
        $( "[id^='btn0']" ).on( "click", function( event ){
            console.log( event.which, event.originalEvent );
        });
     
        setTimeout( function(){
            $( "#btn02" ).trigger( "click" );
        }, 2000);
     
        setTimeout( function(){
            $( "#btn01" ).trigger( "click" );
        }, 4000);
     
    });

    trigger() produira le résultat : undefined undefined
    alors qu'un mouseclick produira : 1 [object MouseEvent]
    Merci, c'est peut-être une solution à envisager, je vais regarder ce que cela donne.
    mais là, comme ça, je me dis que la vérification ne pourra se faire que côté client, vu que c'est un event jquery.
    si c'est côté client, c'est aussi modifiable non ?
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Piolet Voir le message
    Parce que là, des vérifications peuvent être fait, c'est un bot qui enverrait la réponse et non plus mon serveur.
    Donc je peux déceler qq chose.
    Si c'est mon serveur qui m'envoie la réponse comme n'importe quel autre utilisateur, comment savoir si c'est un utilisateur ou un JS qui a cliqué ?
    Je comprends pas ce que tu dis, mais, typiquement, un bot se substitue à l'ensemble utilisateur ET navigateur de l'utilisateur. Normalement ton site web ne discute qu'avec le navigateur, qui réagit aux actions de l'utilisateur, et qui lui affiche ce que tu lui demandes d'afficher.
    Un bot se ferait simplement passer pour un navigateur qui réagit aux actions de l'utilisateur, et communiquerait avec ton site web, exactement de la même manière et de façon indécelable.

    Quelles vérifications espères-tu faire ? En quoi un bot voudrait envoyer une réponse qui serait normalement envoyée par ton serveur ? C'est l'inverse bien évidemment.

    Citation Envoyé par Piolet Voir le message
    si c'est côté client, c'est aussi modifiable non ?
    Ben oui, évidemment ! C'est pour ça que ça a pas de sens de vouloir "détecter si c'est vraiment un clic", puisque le clic est côté client.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Je comprends pas ce que tu dis, mais, typiquement, un bot se substitue à l'ensemble utilisateur ET navigateur de l'utilisateur. Normalement ton site web ne discute qu'avec le navigateur, qui réagit aux actions de l'utilisateur, et qui lui affiche ce que tu lui demandes d'afficher.
    Un bot se ferait simplement passer pour un navigateur qui réagit aux actions de l'utilisateur, et communiquerait avec ton site web, exactement de la même manière et de façon indécelable.

    Quelles vérifications espères-tu faire ? En quoi un bot voudrait envoyer une réponse qui serait normalement envoyée par ton serveur ? C'est l'inverse bien évidemment.



    Ben oui, évidemment ! C'est pour ça que ça a pas de sens de vouloir "détecter si c'est vraiment un clic", puisque le clic est côté client.
    Alors disons le autrement, enfin en espérant que je dise pas trop de connerie, je ne suis pas expert dans ce domaine, sinon, je ne poserais pas la question.

    Si un bot agît tout seul comme un grand via des requêtes HTTP, il peut se retrouver bloquer via le htaccess (j'ai cru le lire qq part).
    En revanche, si le bot simule un utilisateur lambda, en simulant un clic, il suit le cheminement classique, et c'est bien la page web qui enverra les informations.

    Maintenant je suis ouvert à toute explication sur ce point si je dis n'importe quoi (ce qui est possible).

    Mais en l'état, ça ne fera pas forcément avancer mon problème. (enfin ptet que si, mais j'en suis pas encore à vouloir bloquer tous les bots du monde, juste "un" qui pourrait faire ce que j'explique au début)
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  11. #11
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Piolet Voir le message
    Si un bot agît tout seul comme un grand via des requêtes HTTP, il peut se retrouver bloquer via le htaccess (j'ai cru le lire qq part).
    What ? Non. Cela ne peut arriver que si le bot fait quelque chose qui est très clairement différent de ce que ferait un utilisateur. Cela peut arriver pour deux raisons :
    - Le bot ne cherche pas à cacher qu'il est un bot. On pourrait dire qu'il l'annonce. Dans ce cas il laisse simplement l'opportunité aux sites qui ne veulent pas de lui, de le bloquer. Exemple : google bot. (Attention tous les google bots ne le font pas. Ils acceptent la demande de ne pas indexer des pages, mais ne se laissent pas interdire l'accès pour vérifier si le site est légitime.)

    - Le bot a fait une erreur. Par exemple à un moment les utilisateurs normaux communiquaient une certaine information et ne le font plus aujourd'hui, mais le bot le fait toujours. Seulement, un bot qui vise ton site ne ferait pas une telle erreur.

    Citation Envoyé par Piolet Voir le message
    En revanche, si le bot simule un utilisateur lambda, en simulant un clic, il suit le cheminement classique, et c'est bien la page web qui enverra les informations.
    Ce qu'il faut comprendre c'est que ça n'a pas de sens de simuler un clic. Le clic arrive côté client, et ton site n'en entend pas parler. Il n'entend parler que des résultats. Par conséquent, il n'y a aucun besoin de "simuler un clic".
    À la rigueur, un bot spammeur qui cherche à poster sur un forum quelconque, va aller sur le formulaire d'inscription, et envoyer ce formulaire comme s'il avait cliqué sur toutes les cases à cocher, ce qui est donc "simuler des clics." Mais il fait ça parce qu'il ne savait pas à l'avance ce qu'il faut envoyer dans le formulaire, alors il lit le formulaire et essaie de s'y adapter.

    Toi tu sembles vouloir te défendre contre des bots qui visent ton site, et qui donc, savent à l'avance qu'est-ce qu'il faut envoyer. Ils n'ont donc pas besoin de chercher quels clics sont à faire et de les simuler.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    ok ok.

    Donc grosso modo, dans mon cas, je n'ai pas de possibilité d'empêcher un bot de cliquer à la place de l'utilisateur.

    J'avais pensé à une autre possibilité, mais je ne vois pas comment l'implémenter.

    Faire en sorte de différencier le div qui affiche la réponse et le div sur lequel il faut cliquer pour valider cette réponse.
    Mais fatalement, dans le code, en fouillant un peu, on va forcément retrouver des indices qui lient ces 2 div, ne serait que leur position verticales.

    Donc là, en creusant un peu, le bot pourra "facilement" savoir sur quel div il doit cliquer. ça le retardera "un peu", mais ça ne changera pas le résultat final.

    du coup, je suis à court de piste
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  13. #13
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Je pense que personne ne peut deviner ce qui te sortira d'affaire, tant qu'on ne sait pas pourquoi c'est si important qu'un bot ne puisse pas le faire lui-même.
    Ton site ressemble à quoi et quelles sont ses conséquences ?

    Au pire ne jamais sous-estimer la force de dissuasion d'un captcha que tu aurais programmé toi-même au lieu d'en copier/coller un connu.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    Ce que je veux faire, c'est tout con.

    Proposer des questions aux utilisateurs pour faire gagner des lots.
    En cas d'égalité, on chronomètre les utilisateurs
    Le truc c'est que si quelqu'un implémente un bot pour répondre "automatiquement", et bien son chrono risque d'être "très bon" (quitte à faire un robot, autant en faire qui ne répond pas en 0,1 sec, ce qui est humainement impossible, mais un robot qui répondrait rapidement quand même, pour s'assurer de la première place et ne pas être "détecté").

    Et un captcha serait inutile.
    Car en chronométrant, pour équilibrer le truc, on ne peut arrêter le chrono qu'au clic sur la réponse. Le captcha apparaîtrait le clic, et là, l'auteur du robot pour le réellement le saisir, donc inutile.
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  15. #15
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    C'est des questions pour lesquelles il est facile de programmer un robot pour y répondre ? J'ai du mal à voir l'intérêt.

    Si tu envoies les questions sous forme d'images qui changent à chaque fois, ça devrait être un peu décourageant de faire un bot pour ça. Mais si ton jeu devient connu, il n'y a pas de solution : tout ce qu'un bot ne peut pas faire, l'humain le fera à sa place. Du genre le bot demande quelle est la vraie question posée, l'humain clique sur la bonne, le bot donne la réponse à la question, l'humain n'a plus qu'à la donner.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  16. #16
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    Mettre des images à la place des réponses, cela ne permet que de "gagner du temps". Cela reste implémentable pour "décrypter" l'image.

    Ensuite, que le robot donne la bonne réponse et que cela implique une action de "l'auteur" pour valider la bonne réponse, à la rigueur, ça ne me gênerait pas.
    Le temps qu'il clique "physiquement", cela pourra lui faire en perdre (du temps), alors qu'un humain qui connait déjà la réponse pourra en gagner.

    Mais si le robot clique à sa place, là c'est difficilement "contrable"

    Mais pour l'instant, je n'ai que la génération d'image d'à peu près chiant pour un hacker.
    Mais bon, vu que c'est hackable, cela va sûrement impliquer que mon projet va tomber à l'eau :/
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

Discussions similaires

  1. BOV.5 empêcher les liens automatiques
    Par antakini dans le forum Débuter
    Réponses: 7
    Dernier message: 12/02/2013, 17h39
  2. Réponses: 2
    Dernier message: 15/04/2008, 10h55
  3. Comment désactiver les actions automatiques de Windows ?
    Par j-phi dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 06/01/2005, 12h53
  4. Réponses: 4
    Dernier message: 16/03/2004, 18h03
  5. [AppMessage] Comment empêcher un click de la souris ?
    Par altahir007 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 17/10/2003, 14h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo