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

Bibliothèques et frameworks PHP Discussion :

[GD] Code graphique anti robot [Tutoriel]


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 58
    Points : 49
    Points
    49
    Par défaut [GD] Code graphique anti robot
    Bonjour tout le monde,

    J'ai écrit un script (test.php) pour générer un code aléatoire qui s'affiche dans une image afin d'empêcher des robots de s'inscrire dans un espace membres.

    Dans un premier temps je génère un code aléatoire, puis je le crypte avec la fonction mycrypt.

    Après cela j'affiche l'image générée par un autre script (image.php) en lui passant en paramètres le code crypté. Ce script va décrypter le code transmis en paramètres en utilisant la clé qu'il a en commun avec le premier script.

    Cela marche, mais de temps en temps (1 fois sur dix ou 1 fois sur vingt) au lieu d'avoir mon code généré j'ai sur mon image une chaîne de caractères qui n'a rien à voir avec mon code généré.

    Je ne comprends pas d'où vient cette erreur.

    Pourriez vous m'aider?

    le lien vers le script en ligne :

    http://brumespourpres.online.fr/test.php

    Le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    test.php
    <?php 
    	srand((float)microtime()*1000000);
     
    	$longueurTexte = 12;
    	$caracteres = array("1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "j", "k", "m", "n", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F","G", "H", "J", "K", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
    	$compteur = 1;
    	$texte = "";
     
    	while ($compteur <= $longueurTexte) {
    		$texte = $texte . $caracteres[rand(0,count($caracteres)-1)];
    		$compteur = $compteur+1;
    	}
     
    	$iv = mcrypt_create_iv(mcrypt_get_iv_size (MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND);
    	$clee = "secret"; 
    	$texteCrypte = mcrypt_encrypt (MCRYPT_RIJNDAEL_256, $clee, $texte, MCRYPT_MODE_ECB, $iv);
     
    	echo "<html><header></header><body>";
    	echo $texte;
    	echo "<br>";
    	echo "<img src=./image.php?texteImage=" . addslashes(urlencode(serialize($texteCrypte))) . "&iv=" . addslashes(urlencode(serialize($iv))) . ">";
    	echo "<br>";
    	echo "</body></html>";
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    image.php
    <?php 
    	$clee = "secret"; 
    	$texteCrypte = unserialize(urldecode(stripslashes($_GET['texteImage'])));
    	$iv = unserialize(urldecode(stripslashes($_GET['iv'])));
     
    	$texteDecrypte = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $clee, $texteCrypte, MCRYPT_MODE_ECB, $iv);
    	$texteDecrypte = trim($texteDecrypte);
     
    	$longueurTexte = strlen($texteDecrypte);
    	$tailleTexte = 30;
    	$largeurImage = $longueurTexte * $tailleTexte + 100;
    	$hauteurImage = $tailleTexte  + 40;
     
    	$policeTexteImage = "./arial.ttf";
     
    	$image = ImageCreateTrueColor($largeurImage, $hauteurImage);
    	$couleur1 = ImageColorAllocate($image, 255, 255, 0);
    	$couleur2 = ImageColorAllocate($image, 255, 0, 0);
     
    	ImageTTFText($image, $tailleTexte, 0, ($largeurImage - $tailleTexte * $longueurTexte) / 2 , ($hauteurImage - $tailleTexte) / 2 + $tailleTexte, $couleur2, $policeTexteImage, $texteDecrypte);
     
    	Header("Content-type: image/png");
     
    	ImagePNG($image);
    	ImageDestroy($image);
    ?>

  2. #2
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 58
    Points : 49
    Points
    49
    Par défaut
    Je pense qu'il y a de temps en temps une erreur au niveau du décryptage (le texte crypté est mal passé en paramètres par exemple), je ne sais pas si quelqu'un si connaît dans se domaine?

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Ça sent le problème de slashes...
    Vire les addslashes et stripslashes.
    Vire les serialize et unserialize.

    Dans image.php, détecte si magic_quotes_gpc est activé et si c'est le cas effectue un stripslashes récursivement sur $_GET, $_POST, $_COOKIE et $_REQUEST (il faut faire ça dans tous les scripts, à cause de cette directive anti-injection SQL pour newbie)

  4. #4
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut!

    J'ai intégré cette fonction dans l'espace membre que nous avons développé :
    http://www.developpez.net/forums/viewtopic.php?t=220791

    Voici ce que ça donne : http://espm.gotdns.org/inscript.php

    Voici les sources : http://sub0.developpez.com/php/espmem_v2.zip
    Dans le fichier function.php, les fonctions CodeImage & CodeImageSupr.
    Dans le fichier unitform.php, tu trouveras le code d'affichage du formulaire (la fonction View_Form_Inscription).
    Dans le fichier config.php, les options du programme...

    à+

  5. #5
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 58
    Points : 49
    Points
    49
    Par défaut
    Merci à tous les deux pour vos réponses.

    En partant sur ton idée loufoque j'ai trouvé la solution. Apparement la fonction base64_encode() est plus adpatée à ce que je voulais faire.
    Maintenant ça marche nickel.

    J'ai ajouté deux traits aléatoires et j'ai corrigé quelques erreurs en regardant le code de sub0.

    Je donne le code corrigé pour ceux qui seraient interessés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    test.php
    <?php 
    	srand((float)microtime()*1000000);
     
    	$longueurTexte = 12;
    	$caracteres = array("1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "j", "k", "m", "n", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F","G", "H", "J", "K", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
    	$compteur = 1;
    	$texte = "";
     
    	while ($compteur <= $longueurTexte) {
    		$texte = $texte . $caracteres[rand(0,count($caracteres)-1)];
    		$compteur = $compteur+1;
    	}
     
    	$iv = mcrypt_create_iv(mcrypt_get_iv_size (MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND);
    	$clee = "secret"; 
    	$texteCrypte = mcrypt_encrypt (MCRYPT_RIJNDAEL_256, $clee, $texte, MCRYPT_MODE_ECB, $iv);
     
    	echo "<html><header></header><body>";
    	echo $texte;
    	echo "<br>";
    	echo "<img src=./image.php?texteImage=" . base64_encode($texteCrypte) . "&iv=" . base64_encode($iv) . ">";
    	echo "<br>";
    	echo "</body></html>";
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    image.php
    <?php 
    	$clee = "secret";
     
    	$texteCrypte = base64_decode(stripslashes($_GET['texteImage']));
    	$iv = base64_decode(stripslashes($_GET['iv']));
     
    	$texteDecrypte = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $clee, $texteCrypte, MCRYPT_MODE_ECB, $iv);
    	$texteDecrypte = trim($texteDecrypte);
     
    	$longueurTexte = strlen($texteDecrypte);
    	$tailleTexte = 15;
    	$largeurImage = $longueurTexte * $tailleTexte;
    	$hauteurImage = $tailleTexte + 10;
     
    	$policeTexteImage = "./arial.ttf";
     
    	$image = ImageCreateTrueColor($largeurImage, $hauteurImage);
    	$couleur1 = ImageColorAllocate($image, 255, 255, 255);
    	$couleur2 = ImageColorAllocate($image, 0, 0, 0);
     
    	imagefilledrectangle($image,0,0,$largeurImage, $hauteurImage, $couleur1);
     
    	ImageTTFText($image, $tailleTexte, 0, ($largeurImage - $tailleTexte * $longueurTexte) / 2 , ($hauteurImage - $tailleTexte) / 2 + $tailleTexte, $couleur2, $policeTexteImage, $texteDecrypte);
     
    	srand((float)microtime()*1000000);
    	imageline($image, rand($largeurImage/10, $largeurImage/8), rand($hauteurImage/10, ($hauteurImage-$hauteurImage/10)), rand(($largeurImage-$largeurImage/8), ($largeurimage-$largeurImage/10)), rand($hauteurImage/10, ($hauteurImage-$hauteurImage/10)), $couleur2);
    	imageline($image, rand($largeurImage/10, $largeurImage/8), rand($hauteurImage/10, ($hauteurImage-$hauteurImage/10)), rand(($largeurImage-$largeurImage/8), ($largeurimage-$largeurImage/10)), rand($hauteurImage/10, ($hauteurImage-$hauteurImage/10)), $couleur2);
     
    	Header("Content-type: image/jpeg");
     
    	ImageJPEG($image, "", 0);
    	ImageDestroy($image);
    ?>

  6. #6
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 58
    Points : 49
    Points
    49
    Par défaut
    Après réflexion le code ne me parait pas très judicieux.
    N'importe qui peut envoyer du texte crypté par l'url et recopier ce qu'affiche l'image générée... et à partir de là en déduire la clé.

    Je crois que le seul moyen sûr d'envoyer ce code au script générateur d’image va être d'utiliser les sessions. Il va donc falloir que je crée une image, moi qui ne voulais pas me prendre la tête sur les accès concurrents au fichier image c'est raté.

  7. #7
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Effectivement, soit tu enregistres un code dans une session, soit tu utilises le code pour créer le nom du fichier image en admettant que tu crées un fichier et de cette manière, mémoriser le code à entrer... D'autres solutions peuvent-être envisagées, mais l'utilisation de session reste le plus efficace je pense, à+

  8. #8
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 58
    Points : 49
    Points
    49
    Par défaut
    Salut sub0,

    J'ai regardé ton code et à un moment il y a quelque chose que je trouve bizarre.
    Tu transmets (si j'ai bien compris) le hash de ton code image par un "input hidden".

    Seulement ça c'est du HTML, et si j'ai juste normalement c'est le navigateur du client qui va envoyer cette valeur de façon "cachée" aux yeux de l'utilisateur.
    Mais là quelqu'un de malintentionné ne pourrait il pas mettre son propre hashcode et ainsi passer outre la copie du code graphique?

  9. #9
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Oui, la protection contre les robots a une faille de sécurité !
    D'ailleurs, je vous remercie de l'avoir remarqué.

    Je vois 2 ou 3 solutions pour résoudre ce petit problème :
    • Soit sauvegarder le code aléatoire dans les variables globales ou de sessions.

    • Soit nomer le fichier de l'image avec le hash du code. Notez qu'à chaque fois que la fonction de génération de l'image est appellée, elle supprime du dossier temporaire, toutes les images plus veilles de 10 minutes. Ainsi, il n'ya pas de risques de saturation du dossier, et il n'ya pas de problème de fichier supprimé trop tôt non plus. En utilisant le hash pour nommer le fichier jpeg, même si l'utilisateur peut récupèrer le nom de l'image en regardant les propriétés, il ne pourra pas obtenir le code en clair.

    • Noter également, qu'il serait bien vu d'ajouter un grain de sel au hash. Mais l'utilisateur pourrait arriver à le calculer étant donner qu'on lui fournit le mot de passe en clair dans l'image et le mot de passe hashé dans le champs caché du formulaire... Pour avoir un grain de sel efficace, il faudrait enregistrer une variable sur le serveur afin que le grain de sel ne soit pas constant... Mais cela revient finalement au même que la 1ère solution dans ce cas.

    • Ou bien un mix des 3 solutions citées...

    Il conviendrait également de limiter le nombre d'inscription pour une IP, de détecter les adresses mails et les logins générés au hasard... A ce propos, l'espace membre dispose d'une fonction administrateur pour supprimer de la base de données les comptes non activés. En effet, un utilisateur dispose de 2 heures (durée réglable) pour activer son compte et ainsi valider son adresse mail.

    à+

  10. #10
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 58
    Points : 49
    Points
    49
    Par défaut
    • Soit sauvegarder le code aléatoire dans les variables globales ou de sessions.
    Ca m'a l'air d'être le plus simple et le plus sûr.

    • Soit nomer le fichier de l'image avec le hash du code. Notez qu'à chaque fois que la fonction de génération de l'image est appellée, elle supprime du dossier temporaire, toutes les images plus veilles de 10 minutes. Ainsi, il n'ya pas de risques de saturation du dossier, et il n'ya pas de problème de fichier supprimé trop tôt non plus. En utilisant le hash pour nommer le fichier jpeg, même si l'utilisateur peut récupèrer le nom de l'image en regardant les propriétés, il ne pourra pas obtenir le code en clair.
    C'est assez élégant mais comment comparer le code du formulaire avec le hash du fichier ensuite? Parce que dans ton repertoire tu peux avoir plusieurs fichiers image, il faudrait savoir lequel est le bon.

    • Noter également, qu'il serait bien vu d'ajouter un grain de sel au hash. Mais l'utilisateur pourrait arriver à le calculer étant donner qu'on lui fournit le mot de passe en clair dans l'image et le mot de passe hashé dans le champs caché du formulaire... Pour avoir un grain de sel efficace, il faudrait enregistrer une variable sur le serveur afin que le grain de sel ne soit pas constant... Mais cela revient finalement au même que la 1ère solution dans ce cas.
    Il faudrait que le grain de sel soit aléatoire... mais bon du coup il faut transmettre le grain de sel. Il me semble beaucoup plus simple d'utiliser les sessions pour transmettre directement le code image.

    Ce que je ferai :

    - Generation du code aléatoire.
    - Enregistrement dans la session du code.
    - Lock du fichier image.
    - Création du fichier image.
    - Affichage du formulaire.
    - Affichage de l'image.
    - Delock du fichier.

    Récupération des données du formulaire :

    - Récupération des données de la session.
    - Destruction de la session.
    - Tests de validité de l'inscription
    (code conforme, nombre de caractères du login, conformation mot de passe.....)

  11. #11
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par miel_pops
    Citation Envoyé par Sub0
    à chaque fois que la fonction de génération de l'image est appellée, elle supprime du dossier temporaire, toutes les images plus veilles de 10 minutes
    C'est assez élégant...
    C'est surtout très efficace! Pas besoin de locker le fichier puisque l'image n'est valable que pour un seul affichage. La touche F5 (actualiser) va recréer une nouvelle image par exemple et en même temps, supprimer les éventuels fichiers supérieurs à 10 min. La session limite également la durée d'utilisation de cette image. Si l'utilisateur s'endort sur le formulaire d'inscription, la validation sera rejetée et il devra recommencer. 10 minutes pour remplir un petit formulaire, c'est largement suffisant.

    Citation Envoyé par miel_pops
    ...mais comment comparer le code du formulaire avec le hash du fichier ensuite? Parce que dans ton repertoire tu peux avoir plusieurs fichiers image, il faudrait savoir lequel est le bon.
    Il n'y aura très certainement pas beaucoups de fichiers dans ce dossier. Toutes les images plus veilles de 10 minutes sont automatiquement supprimées. Il reste dans le dossier que les nouvelles images. Il suffit de lister ce dossier et de comparer le nom de chaque fichier avec le code recherché. Il n'ya aucun risque d'avoir un doublon (pratiquement improbable). Néanmoins, reste la possibilité d'utiliser la date de création de cette image pour identifier le bon fichier. Cette date peut très bien être ajoutée dans un champs caché du formulaire sans que cela cause de problème de sécurité... On peut également ajouter d'autres informations dans le nom du fichier (IP par exemple), etc...

    Perso, je ne miserais pas tout sur les variables de sessions. Selon moi, la méthode avec le nom du fichier me semble être la meilleure solution, à+

  12. #12
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 58
    Points : 49
    Points
    49
    Par défaut
    L'avantage que je trouve à ta méthode c'est effectivement d'éviter le lock, donc si 10 personnes viennent s'inscrire en même temps elles peuvent être satisfaites rapidement ce qui est un bon point.
    Mais au niveau de la sécurité je me demande s'il n'y a pas encore un problème.
    Imagine que je vienne m'inscrire sur ta page d'inscription, je relève le code image et je note la date que tu passes dans ton hidden.
    Ensuite avec un robot je peux redonner cette même date et vu que j'ai relevé manuellement le code image je sais lequel lui est associé.
    Je vais donc pouvoir m'enregistrer autant de fois que je veux pendant 10 min.

    ... sous réserve d'avoir bien compris tes explications.

  13. #13
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Effectivement, tu as encore raison.

    Dans ce cas, il suffit de supprimer le fichier lorsque l'inscription est acceptée.
    Bien vu!

  14. #14
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 58
    Points : 49
    Points
    49
    Par défaut
    Il conviendrait également de limiter le nombre d'inscription pour une IP
    Je pense aussi que c'est quelque chose d'indispensable. Sur ma partie inscription je vérifie si l'ip du client ne s'est pas inscrite il y a moins d'un certain temps (que j'ai défini à 15min pour le moment).
    Mais il faudrait que j'ajoute un compteur pour éviter des choses aberrantes comme une IP qui a 100 comptes.

    de détecter les adresses mails et les logins générés au hasard
    Ca c'est assez dur à programmer, comment faire une fonction qui différencie un random d'un esprit tordu qui veut pour login Guldur4587?

    ... A ce propos, l'espace membre dispose d'une fonction administrateur pour supprimer de la base de données les comptes non activés. En effet, un utilisateur dispose de 2 heures (durée réglable) pour activer son compte et ainsi valider son adresse mail.
    J'ai lu un peu le thread de l'espace membre c'est assez costaud niveau vérification.

  15. #15
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 58
    Points : 49
    Points
    49
    Par défaut
    Dans ce cas, il suffit de supprimer le fichier lorsque l'inscription est acceptée.
    Comment n'y ai-je pas songé?
    Là ça doit effectivement fonctionner nickel.

  16. #16
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    C'est vrai qu'il n'est pas évident de détecter le random... Cela risque de poser problèmes plus qu'autres choses. Mais il est tout de même possible de définir un niveau. Par exemple, le programme pourrait rechercher des syllabes (consone+voyelle). Certaines voyelles sont souvent côte à côte, exemples "eu", "ou", "ai"... Mais cela ne peux pas être utilisé pour rejeter une inscription. Il faut d'abord vérifier la syntaxe de l'émail, si le serveur existe et ensuite tester éventuellement la cohérence de l'adresse...

    Citation Envoyé par miel_pops
    c'est assez costaud niveau vérification
    La conclusion de ce thread est que pour obtenir une sécurité absolue, SSL est nécessaire, à+

  17. #17
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Si tu le permets (et comme le sujet semble résolu), je vais fusionner ce thread à la suite du post'it de l'espace membre. Tes remarques ont été très constructives, nous pouvons améliorer l'efficacité de l'image anti-robot. D'ailleurs, tu es le bienvenu sur ce thread si tu as d'autres suggestions sur le sujet!

    http://www.developpez.net/forums/viewtopic.php?t=220791

    Cordialement, Sub0

  18. #18
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 58
    Points : 49
    Points
    49
    Par défaut
    Si tu le permets (et comme le sujet semble résolu), je vais fusionner ce thread à la suite du post'it de l'espace membre.
    Oui sans problème.

    J'essaye de faire un petit site en php mais étant hébergé par un hebergeur gratuit je n'ai pas le droit à grand chose donc pas de SSL à mon avis.
    Chez free on n'a même pas le droit à la fonction sleep().
    Mais bon c'est gratuit... et puis je vais essayer de contourner ça avec une boucle while. :p

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [GD] Anti-robot : problème de lecture
    Par Rocknacro dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 15/02/2008, 15h04
  2. Code graphique blanc
    Par afssaLERH dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/12/2007, 10h46
  3. [Image]Insérer une image générée par PHP dans un formulaire (anti-robot)
    Par dark_vidor dans le forum Bibliothèques et frameworks
    Réponses: 14
    Dernier message: 29/04/2006, 23h48
  4. Code pour anti-bot dans DLL Isapi Web
    Par fredfred dans le forum Web & réseau
    Réponses: 5
    Dernier message: 20/04/2006, 18h01
  5. Réponses: 24
    Dernier message: 17/03/2005, 01h36

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