Page 1 sur 6

Ajouter juste un captcha

Posté : 16 nov. 2011, 21:47
par ZePhYmA
Bonsoir à tous,

Je suis très novice, à vrai dire je ne sais pas du tout programmer en php mais j'essaye d'apprendre. :P

Mais voilà, j'ai trouvé un formulaire de contact sur le web qui me plait bien (c'est pas moi qui l'ai fait).

[Censuré]

Bon, voilà la bête. Maintenant je voudrais insérer un captcha, alors j'ai trouvé par exemple cette documentation qui à l'air (à mes yeux d’inexpérimenté) pas mal. Le problème reste que je galère car je veut pas prendre tout le code de cette documentation, mais juste ajouter le captcha à mon formulaire déjà crée et j'ai essayé avec pas mal d'autres sans succès.

Alors au lieu de m'arracher les cheveux pendant des heures devant des lignes de codes que je ne comprends pas, je viens vous voir pour savoir si vous auriez du temps pour m'aider. Je veux pas spécialement qu'on me mâche le travail, mais qu'on me guide et/ou m'oriente. Merci pour vos efforts ! 8-)

Bon alors je sais, c'est la question intergalactique qui est posée dans toutes les forums mais bon, chaque fois que je vais sur une page web qui explique un peu comment mettre un captcha, j'arrive pas à mettre sur mon formulaire.

Re: Ajouter juste un captcha

Posté : 18 nov. 2011, 17:07
par arthur77
Bonjour,

bon alors si tu ne veux pas te prendre la tete avec des codes compliqués (car je vois que le tuto que tu as trouvé utilise JS et autres), le plus simple et de te faire ton petit système perso que tu peux maitriser.

Prenons le problème à la base : qu'est-ce qu'un captcha ?
C'est une image contenant des caractères plus ou moins brouillés, qu'un robot (spam) ne peut pas déchiffrer, et que l'utilisateur doit lire et noter en dessous ce qu'il lit pour vérifier qu'il est bien humain (ça fait bizar d'écrire ça :P )
Cette image doit changer énormément (pour contrer la force brute) et arriver de façon aléatoire.

Je te propose une approche d'algorithme :

- tu créer un nombre aléatoire
- tu va chercher dans une BDD qui contient des adresses d'images captcha, l'image correspondant a l'id sortit au hasard.
- tu affiche cette image
- tu demande à l'utilisateur de noter ce qu'il vois (<input type="text" ... )
- tu rajoute un champ caché contenant l'id de ce captcha (<input type="hidden" ... )
- et qu'il envoie le formulaire

traitement de ce formulaire :

- tu récupère tout ce que tu as besoin dans ton formulaire de façon habituelle
- tu récupère, via le champ caché, l'id du captacha qui a été affiché
- tu récupère ce que l'utilisateur a lu dans le captacha
- tu check ta BDD captach pour voir si : se qu'a entrer l'user est correct
- si oui, tu le contact
- si non, retour à la page précédente en indiquant une erreur au captcha

et la BDD captcha que tu auras besoin serai comme ça
champs :
- id (pour pouvoir classer les images et les retrouver facilement)
- adresse (adresse de l'image)
- solution (pour comparer avec ce qu'a dit l'user

Et plus tu aura d'image captcha dans ta BDD, plus ton système sera efficace contre la force brute


Voila ça ça me semble plus simple que le tuto que tu as trouver, et je peux t'aider dans cette direction :)
Ah une dernière chose : je n'ai pas trouvé de meilleur moyen pour comparer la solution que de la mettre dans la BDD, ce qui impliqué qu'il va falloit très bien sécuriser tes requettes, sinon le pirate pourrait récupérer la totalité de la BDD, les solutions avec.

Re: Ajouter juste un captcha

Posté : 18 nov. 2011, 17:27
par Jonathan
Bonjour,

Si vraiment tu ne veux pas te prendre la tête, tu peux opter pour cette solution méga-assistée :
http://www.hotdreamweaver.com/videos/FormCaptcha/

Cela dit, ce n'est pas du tout formateur, donc ce n'est qu'à titre de proposition...


Le logiciel utilisé dans la vidéo : http://dreamweaver.gooofull.com/fr (téléchargeable à cette adresse)

Re: Ajouter juste un captcha

Posté : 19 nov. 2011, 12:46
par Cyrano
Si vraiment tu ne veux pas te prendre la tête, tu peux opter pour cette solution méga-assistée :
http://www.hotdreamweaver.com/videos/FormCaptcha/
Très mauvais conseil effectivement : on apprend pas à programmer en cliquant sur des boutons et on apprend encore moins à maitriser son code. C'est en outre une solution pour le moins onéreuse : le téléchargement de DreamWeaver est peut-être gratuit, mais pas le logiciel lui-même qui n'est livré qu'à titre de version d'essai temporaire. Au bout de la période d'essai, il faut l'acheter pour pouvoir continuer à l'utiliser, et ce n'est pas bon marché, surtout pour faire du code spaghetti comme DW sait si bien le faire. :non:

Re: Ajouter juste un captcha

Posté : 19 nov. 2011, 16:53
par Jonathan
Tout à fait d'accord avec toi Cyrano, d'où mon avertissement. Cela dit, des solutions simplistes donnant des résultats spaghettis suffisent parfois à certains... J'ai donc proposé, mais je conseille quand même vivement de suivre la procédure d'arthur77 !

Re: Ajouter juste un captcha

Posté : 19 nov. 2011, 19:25
par arthur77
C'est sur que d'un point de vue pédagogique c'est pas génial ... Et puis à la fin de la période d'essaie, tu la dans le baba parce que tu ne sais pas comment fonctionne ton code !
Et t'inquiete pas j'ai du temps et je suis le sujet pour répondre à tes questions et t'aider :)

Re: Ajouter juste un captcha

Posté : 20 nov. 2011, 18:40
par ZePhYmA
Et t'inquiete pas j'ai du temps et je suis le sujet pour répondre à tes questions et t'aider
A tes risques et périls :mrgreen:

Bon ben je viens de lire ce que tu m'as "proposé" et cela me semble bien (de mon point de vue en tout cas :!: ) mais listé comme tu l'as fais ça me fout les boules par ce que je sais pas si je vais arriver à faire tout ça :mrgreen:

Première étape, créer un nombre aléatoire :
<?php

//création d'un nombre aléatoire entre 1 et 100

$nb_min = 1;
$nb_max = 100;
$nombre = mt_rand($nb_min,$nb_max);

echo $nombre;
?>
Ce code convient :?:

Deuxième étape, je dois trouver sur le net un pack d'images de captcha ? J'ai pas vraiment compris le terme d'adresses d'images :|

Re: Ajouter juste un captcha

Posté : 20 nov. 2011, 18:55
par arthur77
Oui, ta première étape c'est niquel :) (le echo de la fin sera inutile plus tard mais c'est un détail qui se règle en environ 1/20e de seconde)
Deuxième étape, je dois trouver sur le net un pack d'images de captcha ? J'ai pas vraiment compris le terme d'adresses d'images :|
Pour les images captcha, une recherche dans google images j'en ai déjà trouvé pas mal. Là tu va avoir du boulot extra-codage (neologisme ? :P ), il faut donc que tu enregistre les images, que tu sépare chaque suite de caractère (car certaines contiennent plusieurs captcha sur une seule image) et que tu te fasse un dossier "captcha" avec dedans tout tes images captcha individuelles. Je te conseille de les nommé "captcha1" "captcha2" "captcha3" ... Et aussi, je te conseil de les enregistrer au format .png, pour un affichage web plus rapide avec une bonne qualité pas trop lourde.
CONSEIL : si tu tombe sur internet sur un pack deja préparé d'images captcha satisfaisante, saute sur l'occasion ! Tu n'auras plus qu'a les mettre au bon format (s'il faut)


Ensuite tu mettras ce dossier à la racine de ton site. Je ne sais pas comment est organisé ton dossier WWW de ton serveur, mais tu rajoute le dossier a coté de tes autres dossiers.

Tu crée une base de donnée nommée "captcha" avec les champs : id (int, 255, primary, auto-increment); adresse (text); solution (varchar 255)
Et là ça va être le plus fastidieux, tu dois rentrer chaqua captacha que tu as récupéré dans ta BDD. Quand tu rentre une nouvelle ligne dans PhpMyAdmin, ne remplit pas le champ ID, il sera rempli automatiquement. Dans le champ adresse, tu met l'adresse relative de l'image
(ex : captcha/captcha1.png , en supposant que ton dossier captcha sois à la racine). Dans solution, tu note la réponse du captcha (que tu dois lire tout seul) attention : si tu te trompe en remplissant cette case, l'utilisateur qui tombra sur le captcha pourra essayer des millions de fois ça ne marchera jamais !

Voila j'espère avoir été assez clair, pour la première partie (récupération des images) tu devrais savoir t'en sortir si tu sais magnier google et paint :P Pour la suite je pourrais t'aider si tu ne t'en sors pas avec PhpMyAdmin.
:)

Re: Ajouter juste un captcha

Posté : 20 nov. 2011, 20:23
par ZePhYmA
Donc voilà, j'ai fais avec paint 8 captcha, format png, chiffres/lettres placée dans un dossier nommé captcha lui-même placé à la racine.

En ce qui concerne le code de la première étape je l'insère dans mon formulaire déjà :?:

J'ai crée la base de donnée et la table captcha avec les champs et options/préférences mentionnées !

Ensuite ... J'ai du mal pour rentrer les captcha dans adresse. Pourrais-tu être plus explicite quant à la manière de le faire ? :oops:
Tout ce que je peut faire, je crois, c'est ajouter un index FULLTEXT.

Re: Ajouter juste un captcha

Posté : 20 nov. 2011, 22:35
par arthur77
Et ba c'est très bien déjà ! :)
Non, on mettra tout dans le fichier a la fin car chaque module à se place précise.

Non, le FULLTEXT est inutile ici; pour les adresses je t'explique plus en détail :

dans le développement web, il y a 2 types d'adresses: les adresses absolues (ex : http://google.com, ou encore http://monsite.com/index.php)
et les adresses relatives (ex : /scripts/log.js ou encore images/logo.png)
Les adresses absolues fonctionnent partout. Tu peux la mettre sur ton site, sur un autre site, sur un document Word, bref sa fonctionne partout.
Les adresses relatives vont rechercher dans le meme dossier qu'où est situé le fichier qui est entrein d'être éxecuté par le serveur (ici, le fichier .php ou .html) quand tu developpe ton site, c'est plus simple de mettre des adresses relatives, car tu ne sais pas forcemment deja ton adresse de ton site avec ton nom de domaine et tout !
M@teo21 du SDZ explique bien mieux que moi ici : http://www.siteduzero.com/tutoriel-3-13 ... liens.html

Donc, par exemple sur ton serveur, tu as un dossier "pages" avec toutes tes pages, et un dossier "captcha" avec tes images captcha (et surment d'autres dossiers mais ici on s'en fout), tu va utiliser un lien relatif, et tu dois partir du dossier ou se trouve la page et remonté jusqu'à l'image :

captcha/captcha1.png

(dossier : captcha (doit être dans le meme dossier que ton dossier de pages) , fichier "captcha1" plus son extension (ne pas oublier !) .png)

donc dans une balise image ça donne :

<img src="captcha/captcha1.png" alt="captcha" />

(ça sa sera pour l'affichage)

dans la BDD, tu met juste : captcha/captcha1.png, pour qu'on puisse plus tard le récupérée et l'utilisaté facilement.

Bon ça fait un gros pavé, je sais pas si je suis bien clair :?

Re: Ajouter juste un captcha

Posté : 21 nov. 2011, 08:28
par ZePhYmA
Pas d'inquiétude, en ce qui concerne les types de liens je sais déjà ! :P

Juste que je comprends pas trop les mettre dans ma BDD via PhpMyAdmin :!:

Moi j'ai ça :arrow: [censuré] Mais ou aller après pour entrer ces liens relatifs ?

Re: Ajouter juste un captcha

Posté : 21 nov. 2011, 17:47
par arthur77
Ah okay désolé ^^

Alors là tu es dans l'onglet "Structure", va dans l'onglet "Insérer", tu va voir une liste de formulaire correspondant aux cases de ta BDD, tu les remplis :
- id : tu ne met rien, MySQL le fera tout seul
- adresse : tu met l'adresse de l'image (comme expliqué à mon précédent message :P )
- solution : tu tape la solution (le "secret") du captcha

tu les remplit à la suite des autres en décochant la case "ignorer", quand PhpMyAdmin n'affiche plus de formulaire, tu clique sur "executer" et tu recommence ça pour ajouter tes 8 images dans ta BDD.

:)

Re: Ajouter juste un captcha

Posté : 21 nov. 2011, 18:21
par ZePhYmA
Voilà c'est fait !

Etape suivante, je suis un peu perdu avec tout ça, on en est à tu affiche cette image :?:

Re: Ajouter juste un captcha

Posté : 21 nov. 2011, 20:20
par arthur77
Hop hop hop pas si vite :wink: avant de l'afficher, il faut la récupérer !
Et rappel toi, on la récupère en fonction du nombre aléatoire généré.

Rappel, le code pour générer le nombre aléatoire :
$nombre_aleat = mt_rand(0,8);
(tu as 8 captcha donc j'ai mit entre 0 et 8, tu pourra modifier ce nombre en meme temps que tu ajoute des captcha.=

Ensuite, on va faire une requette MySQL pour demander à ta BDD de nous donner l'adresse de l'image.
Tu es aller voir le tuto sur PDO que je t'ai mit ? a cette adresse : http://www.siteduzero.com/tutoriel-3-34 ... x-bdd.html

Suis le bien, quand tu auras fini, lit la suite de mon message :)

------------------------------------------------------------

Voila si tu as fini le tuto,
je résume le tuto, il faut que tu ajoute ce code dans ta page, je te conseille de le mettre après l'entête HTML comme ça tu le retrouve facilement.
<?php
$PARAM_hote='localhost'; // le chemin vers le serveur
$PARAM_port='3306';
$PARAM_nom_bd='sdz'; // le nom de votre base de données
$PARAM_utilisateur='root'; // nom d'utilisateur pour se connecter
$PARAM_mot_passe=''; // mot de passe de l'utilisateur pour se connecter
$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
try
{
        $connexion = new PDO('mysql:host='.$PARAM_hote.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
}
 
catch(Exception $e)
{
        echo 'Erreur : '.$e->getMessage().'<br />';
        echo 'N° : '.$e->getCode();
}
?>
En modifiant les valeurs des $PARAM au début avec tes infos.

Ensuite, on va faire la requete avec query, ce qui donne :
$sql = 'SELECT adresse FROM captcha WHERE id ='.$nombre_aleat;
$req = $connexion->query($sql);
$req->setFetchMode(PDO::FETCH_OBJ);
$data = $req->fetch();
$adresse = $data->adresse;
L'adresse de ton image sera dans la variable $adresse.

Je t'explique ce code ligne par ligne:

Code : Tout sélectionner

texte de la requette SQL, avec comme paramètre de recherche l'id correspondant au nombre aléatoire execution de la requette on "transforme" le reponse de la requette pour qu'il sois utilisable on va chercher la première ligne de la réponse (ici il n'y a de toute façon qu'une ligne) on enregistre l'adresse dans la variable $adresse

Une fois que tu as l'adresse de ton image, pour l'afficher, c'est du gâteau :wink:
<img alt="captcha" src="<?php echo $adresse; ?>" />

Re: Ajouter juste un captcha

Posté : 21 nov. 2011, 22:18
par ZePhYmA
J'ai finis le tutoriel.

Je n'avais pas la ligne
extension=php_pdo.dll
donc je l'ai rajoutée au début de mon php.ini et j'ai aussi placé
extension=php_pdo_mysql.dll
au début de mon php.ini donc normalement cela devrait être bon. C'est enregistré quant au nombre aléatoire :!:

Quelques questions quant à la suite de la mise en place.

- La requête, je l'effectue dans PhpMyAdmin ou c'est juste un exemple :?:
- Je place donc le code du nombre aléatoire et celui des paramètres à côté dans le fichier, ça ne gênera pas :?:
- En ce qui concerne le <img alt="captcha" src="<?php echo $adresse; ?>" />, je fais de cette sorte :
<label for="captcha">Recopiez les caractères de l'image:</label>  <img alt="captcha" src="<?php echo $adresse; ?>" /> <input type="text" name="captcha" id="captcha" />
:?: