Bonjour,

Je voudrais trouver une méthode pour supprimer le captcha des formulaires, j'ai googlé pas mal avant de poster mais google est pas mon ami sur ce coup la car le peux de tuto trouvé sont que partiellement efficace.

Avez vous des solutions plus efficace ?

Merci d'avance pour vos réponses.

Librement.

20 réponses


tottosche
Réponse acceptée

A la base, c'était ton idée, et oui je confirme cette solution peut empecher les robot qui ne gere pas les cookies d'envoyer un message (maintenant je ne sais pas si le % de robot qui ne savent pas lire les cookies est elevé ou pas)

mais en plus de cela, sur le forum, il conseil de faire une protection CSS + JS

<u>Petit résumer:</u>

  1. Ajouter un champs input dans ton formulaire avec un id (exemple id="censure")

  2. Modifier ton css pour rendre invisible ton nouveau champ invisible (example: #censure {display: hidden;}

  3. Tu rempli la valeur de ce champs par la valeur d'un variable $_SESSION
    example:
    session_start();
    $_SESSION'token'] = md5(uniqid(rand(), true));

...

<input id="censure" name="token" value="<?php echo $_SESSION'token']; ?>" type="text" />

  1. Une foi que c'est envoyé, avant de l'entré dans la BDD, tu vérifies si $_POST'token'] == $_SESSION'token']

<u>Bonus:</u>

  1. Il conseil d'avoir une protection javascript (car les robot on dure a gerer le JS) et si l'utilisateur n'as pas JS activé, il affiche un captcha

Autrement dit sans captchat c'est plus vivable c'est ça ?

Tu fais un input caché, si il est rempli tu n'envoies pas le formulaire (vu qu'un bot rempli tout les champs) si il ne l'ai pas tu envois le formulaire.

Oui, je connais le input caché mais certain bot détecte et passe outre.

Tu fais un input qui est caché par du javascript.

le + le bot tombera dans le panneau car comme il y a peut de chance qu'il utilise le javascript et remplira le champ qui est visible pour lui.

Le -
Les petits humains qui n'utiliseront pas de javascript (un petit pourcentage) auront le même problème que le bot :)

Tu peut toujours mettre une phrase avec balise noscript pour les avertirent

Après cela reste à tester :)

Tu fais un formulaire en Ajax :)
Certains bots ont l'air de passer quand même (1 à 3 spams par semaines ici)

Alors, voila comment je pense faire :

1 un champ input caché par du css (j'ai lu sur google que certain bot détècte le hiden et donc ne touche pas au input avec un hiden)

2 l'input caché par le css je l'alimente avec un token généré et mi en session. (J'ai pu lire que les robots ne savent pas gérer les cookies et session.)

3 une fois le formulaire soumit, je vérifie que le imput caché contiens bien le token en session, si pas, je bloc.

Quand pensez-vous ??

@Grafikart: En quoi le faite d'avoir le formulaire en Ajax bloque les robot?
Le robot, tout le qui l'interesse c'est la methode, l'action et les champs? Pourrais tu donner plus de details, ça m'interesserait :)

je te conseillerai donc de toujours faire de vérifications a chaque entré de tes DB bien que pour ce cas si, ce n'est pas si dangereux mise a par qu'il y a un anonyma mais bon..

Ca me dit pas si ma méthode est bonne du coup.

Oups effectivement

Dans ta solution, tu pourrais m'expliquer pourquoi attribuer la valeur d'un token?

Il y a deux option:

Le robot qui connaissent <u>pas</u> l'astuce du hidden:
Il vont remplir le champ de blabla, une foi envoyé, tu vérifie si le champ = ton token il sera différent donc tu rejet. mais tu aurais mis une valeur static que tu aurai vérifier avant l'ajout dans la BDD aurait été le mm

Le robot qui connaissent l'astuce du hidden:
Ils voient que c'est en hidden, donc il ne modifiera pas le champs, avant ajout dans la bdd tu vérifie et tu vois que la valeur est la même donc tu ajoute le message

Ou alors j'ai pas dutout compris ton systeme de "token"

L'avantage du token c'est que pour les robots qui connaisse l'astuce du hidden, n'aura pas la valeur dans le input car il ne gère pas les sessions et donc pas de token (sécurité en plus).

Aaaah donc tu créerais un cookies précédement et une variable session qui on la même valeur,
une foi sur le formulaire, tu lis la valeur d'un variable situé dans le cookies et tu la place dans le input hidden, et puis une foi envoyé tu compares la variable session et la variable contenu dans le champs champs...

Oui si le robot ne gère pas les cookies c'est une solution, mais si l'utilisateur n'a pas autorisé les cookies, il ne pourras pas utiliser ton form

Mais a ce moment la, quitte a faire tout ces traveaux, pourquoi ne pas utiliser Recaptcha utilisé par de nombreuse compagnie et plutot réputé? tu auras une plus grande sécurité (sans y vouloir faire top de pub)

EDIT:

Effectivement avec un titre sans captcha ma solution n'est pas des mieux
Mais si captcha a été inventé c'est qu'il etait nécessaire pour avoir une plus haute protection contre les spams.
donc soit tu fait accepte qu'il y ai des quelques spams et tu utilises ta solution soit tu utilise un captcha (même si c'est pas non plus une protection à 100%

plus simple, juste une session car une session crée un cookie et si le bot ne gère pas les cookies, ben il ne gère pas non plus les sessions ;)

D'après ce forum qui date depuis Avril 2010, les certain bots gèrent les cookies, par contre ils on dure a parser correctement le CSS donc les champs mis en CSS display invisible seront remplis par le robot et pas l'utilisateur mais les robot font du bruteforcing en essayant de completer les champs de façon aléatoire donc il faudrai que tu essaye de te protéger contre le bruteforcing de ton form

Donc il avait pensé:

Ta solution cookies + une protection javascript (qui est remplacé par une solution captcha si l'utilisateur n'a pas activé JS)

Ce qui donne 95% d'utilisateur qui ont un formulaire conviviale et 5% avec un captcha et une sécurité très acceptable

ok, donc si le robot rempli (donc modifie la valeur du input) je ne retrouverais pas mon token et donc je soumet pas le formulaire ;)

Ou alors j'ai raté un truc ^^

C'est exactement ce que j'ai fait, ta résumé mon formulaire :D

Merci beaucoup pour la patience.

Au plaisir.

Avec plaisir,

j'espere au moins que ça a répondu a tes attendes et que ton "problème" est résolu

Bien sur que ça répond à mes attendes, je valide une de tes réponses.

Encore 1000 merci.