Accueil > > > CAPTCHA NON VISUELLE
CAPTCHA NON VISUELLE
Information sur la source
Description
En réponse à... http://www.phpcs.com/code.aspx?ID=42504 et parce que c'est chiant de proposer une correction du codes des autres dans les commentaires (indentation, coloration)... si ça gène les admin qu'il n'hésitent pas à me le dire pour que je ne réitère pas... ... .. . Donc comme son nom l'indique c'est une captcha non visuelle... un coup il faut faire une opération simple (addition, soustraction ou multiplication) l'opération étant affichée soit avec des chiffres et l'opérateur de calcul soit en toutes lettres, un autre coup il faut trouver le caractère se trouvant à la position donnée ou alors il faut trouver la lettre se trouvant entre les deux lettres énoncées... .. . Avantage : est compatible avec les navigateur en mode texte pour les malvoyants Désavantage : plus facile à casser qu'une bonne captcha visuelle, encore faut il que le bot soit fait spécifiquement pour ce code, cela reste donc largement suffisant pour la plupart des sites (système semblable utilisé par php.net)
Source
- <?php
-
-
- /*
- * Created on 7 mai 07
- *
- * @autor : The Kankrelune
- * @copyright : The WebFaktory © 2006/2007
- *
- */
-
- function _captchaLettres()
- {
- $str = 'abcdefghijklmnopqrstuvwxyz';// on crée la chaine
- $str .= strtoupper($str);
- $length = mt_rand(5,12);
- $str = substr(str_shuffle($str),0,$length);
- $pos = mt_rand(2,$length-1); // on choisi la position
-
- if(!isset($_SESSION))// on met le résultat en session puis on renvois la question
- session_start();
-
- $_SESSION['captchaResult'] = $str[$pos-1];
-
- return 'Dans <b>'.$str.'</b> quelle lettre se trouve entre <b>'.$str[$pos-2].'</b> et <b>'.$str[$pos].'</b>';
- }
-
- function _captchaCalculChiffres()
- {
- $operators = array('-','+','*');
- $operator = $operators[array_rand($operators)];// on récupère l'opérateur de calcul
-
- $nb1 = rand(1, 10);
- $nb2 = ($operator === '-') ? mt_rand(1, $nb1) : mt_rand(1, 10); // on évite les résultats négatif en cas de soustraction
-
- $calcul = $nb1.' '.$operator.' '.$nb2;
-
- if(!isset($_SESSION))// on met le résultat en session puis on renvois la question
- session_start();
-
- eval('$_SESSION[\'captchaResult\'] = strval('.$nb1.$operator.$nb2.');');
-
- return 'Combien font <b>'.$nb1.' '.($operator === '*' ? 'x' : $operator).' '.$nb2.'</b>';
- }
-
- function _captchaCalculLettres()
- {
- $operators = array('-' => 'moins', '+' => 'plus', '*' => 'fois');
- $operator = array_rand($operators);
- $op = $operators[$operator]; // on récupère l'opérateur de calcul
-
- $num = array(
- 'zero', 'un', 'deux', 'trois',
- 'quatre', 'cinq', 'six', 'sept',
- 'huit', 'neuf', 'dix'
- );
-
- $nb1 = array_rand($num);
- $nb2 = array_rand($num);
-
- if($operator === '-' && $nb1 < $nb2)
- while($nb1 < ($nb2 = array_rand($num))); // on évite les résultats négatif en cas de soustraction
-
- if(!isset($_SESSION)) // on met le résultat en session puis on renvois la question
- session_start();
-
- eval('$_SESSION[\'captchaResult\'] = strval('.$nb1.$operator.$nb2.');');
-
- return 'Combien font <b>'.$num[$nb1].' '.$op.' '.$num[$nb2].'</b>';
- }
-
- function _captchaAlphaNum()
- {
- $str = md5(time()); // création de la chaine
- $length = mt_rand(5,12);
- $str = substr($str,0,$length);
- $pos = mt_rand(1,$length); // on choisi la position
-
- if(!isset($_SESSION))// on met le résultat en session puis on renvois la question
- session_start();
-
- $_SESSION['captchaResult'] = $str[$pos-1];
-
- if($pos === 1)
- $pos = 'le premier';
- elseif($pos === 2)
- $pos = 'le second';
- elseif($pos === $length)
- $pos = 'le dernier';
- elseif($pos === ($length-1))
- $pos = 'l\'avant dernier';
- else
- $pos = 'le '.$pos.'ème';
-
- return 'Quel est '.$pos.' caractère dans <b>'.$str.'</b>';
- }
-
-
- function getCaptcha()
- {
- $functions = array(
- '_captchaLettres', '_captchaCalculChiffres',
- '_captchaCalculLettres', '_captchaAlphaNum'
- );
-
- $captcha = $functions[array_rand($functions)];
- return $captcha();
- }
-
-
- function checkCaptcha( $postVarName = 'captchaResult', $caseInsensitive = false)
- {
- if(!isset($_SESSION))
- session_start();
-
- if(!isset($_POST[$postVarName],$_SESSION['captchaResult']))
- return false;
-
- if($caseInsensitive === true && !is_numeric($_SESSION['captchaResult']))
- {
- $_POST[$postVarName] = strtolower($_POST[$postVarName]);
- $_SESSION['captchaResult'] = strtolower($_SESSION['captchaResult']);
- }
-
- return ($_POST[$postVarName] === $_SESSION['captchaResult']);
- }
-
- ?>
<?php
/*
* Created on 7 mai 07
*
* @autor : The Kankrelune
* @copyright : The WebFaktory © 2006/2007
*
*/
function _captchaLettres()
{
$str = 'abcdefghijklmnopqrstuvwxyz';// on crée la chaine
$str .= strtoupper($str);
$length = mt_rand(5,12);
$str = substr(str_shuffle($str),0,$length);
$pos = mt_rand(2,$length-1); // on choisi la position
if(!isset($_SESSION))// on met le résultat en session puis on renvois la question
session_start();
$_SESSION['captchaResult'] = $str[$pos-1];
return 'Dans <b>'.$str.'</b> quelle lettre se trouve entre <b>'.$str[$pos-2].'</b> et <b>'.$str[$pos].'</b>';
}
function _captchaCalculChiffres()
{
$operators = array('-','+','*');
$operator = $operators[array_rand($operators)];// on récupère l'opérateur de calcul
$nb1 = rand(1, 10);
$nb2 = ($operator === '-') ? mt_rand(1, $nb1) : mt_rand(1, 10); // on évite les résultats négatif en cas de soustraction
$calcul = $nb1.' '.$operator.' '.$nb2;
if(!isset($_SESSION))// on met le résultat en session puis on renvois la question
session_start();
eval('$_SESSION[\'captchaResult\'] = strval('.$nb1.$operator.$nb2.');');
return 'Combien font <b>'.$nb1.' '.($operator === '*' ? 'x' : $operator).' '.$nb2.'</b>';
}
function _captchaCalculLettres()
{
$operators = array('-' => 'moins', '+' => 'plus', '*' => 'fois');
$operator = array_rand($operators);
$op = $operators[$operator]; // on récupère l'opérateur de calcul
$num = array(
'zero', 'un', 'deux', 'trois',
'quatre', 'cinq', 'six', 'sept',
'huit', 'neuf', 'dix'
);
$nb1 = array_rand($num);
$nb2 = array_rand($num);
if($operator === '-' && $nb1 < $nb2)
while($nb1 < ($nb2 = array_rand($num))); // on évite les résultats négatif en cas de soustraction
if(!isset($_SESSION)) // on met le résultat en session puis on renvois la question
session_start();
eval('$_SESSION[\'captchaResult\'] = strval('.$nb1.$operator.$nb2.');');
return 'Combien font <b>'.$num[$nb1].' '.$op.' '.$num[$nb2].'</b>';
}
function _captchaAlphaNum()
{
$str = md5(time()); // création de la chaine
$length = mt_rand(5,12);
$str = substr($str,0,$length);
$pos = mt_rand(1,$length); // on choisi la position
if(!isset($_SESSION))// on met le résultat en session puis on renvois la question
session_start();
$_SESSION['captchaResult'] = $str[$pos-1];
if($pos === 1)
$pos = 'le premier';
elseif($pos === 2)
$pos = 'le second';
elseif($pos === $length)
$pos = 'le dernier';
elseif($pos === ($length-1))
$pos = 'l\'avant dernier';
else
$pos = 'le '.$pos.'ème';
return 'Quel est '.$pos.' caractère dans <b>'.$str.'</b>';
}
function getCaptcha()
{
$functions = array(
'_captchaLettres', '_captchaCalculChiffres',
'_captchaCalculLettres', '_captchaAlphaNum'
);
$captcha = $functions[array_rand($functions)];
return $captcha();
}
function checkCaptcha( $postVarName = 'captchaResult', $caseInsensitive = false)
{
if(!isset($_SESSION))
session_start();
if(!isset($_POST[$postVarName],$_SESSION['captchaResult']))
return false;
if($caseInsensitive === true && !is_numeric($_SESSION['captchaResult']))
{
$_POST[$postVarName] = strtolower($_POST[$postVarName]);
$_SESSION['captchaResult'] = strtolower($_SESSION['captchaResult']);
}
return ($_POST[$postVarName] === $_SESSION['captchaResult']);
}
?>
Conclusion
Voila c'est très simple mais au moins c'est propre... après il suffit de faire... .. .
<?php echo getCaptcha(); ?>
Inutile de vous expliquer comment faire la vérification (enfin j'espère) le résultat étant stocké dans $_SESSION['captchaResult']
^_^
@ tchaOo°
Historique
- 30 avril 2007 14:57:15 :
- correction d'une faute de frappe... .. .
- 30 avril 2007 16:17:29 :
- Petite modif au niveau de _captchaCalcul() $max était bloqué à 32 (c'est ça le copié collé) je l'ais mis à 100 ce qui est déjà trop à mon gout... par défaut c'est 10 ce qui est suffisant je pense... pas besoin d'obliger l'internaute à sortir sa calculatrice... lol... .. .
- 02 mai 2007 15:21:59 :
- Ajout d'une captcha calcul en toute lettre et modification de la captcha lettres de façon à ce que le ce soit le caractère situé entre le caractère X et le caractère Y qui soit demandé... j'ai également viré les paramètres $min et $max des fonctions ces derniers étant peu utiles... .. .
- 02 mai 2007 15:35:45 :
- Petite modif pour l'énoncé de la position du caractère dans _captchaAlphaNum()... .. .
- 04 mai 2007 00:50:04 :
- suppression d'une ligne inutile qu'on se demande ce qu'elle foutait là... .. .
- 07 mai 2007 13:20:20 :
- Modification des captcha calcul... le résultat était stocké sous forme d'int mais les données post (ou get) étant toujours des string ça pouvais poser problème lors de la vérification si on utilisait l'opérateur de comparaison typé... ajout d'une fonction
(bool) checkCaptcha( [(str) postVarName, [(bool) caseInsensitiv]])
et d'un zip avec exemple d'utilisation... .. .
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Protection page [ par SatanCorporation ]
Salut a tous !!!!!sur mon site web je voudrais créé une fonction qui me permettrait de protecger une page de mon site.Je voudrias que le code de la pa
Protection page web [ par SatanCorporation ]
donc tu vois ce que je veux faire c une protection de page web.je vopudrais que ma page resemble a ca ://file.php<?include('protect.php');echo "Apr
protection download [ par bioff ]
Comment empêcher un download direct avec l'URL et ainsi outrepasser le script "mot de passe"...D'avance,Merci.bioff
Protection d'html URGENT! [ par Yoteco ]
Voilà,J'ai un ti problème... J'ai fais une fenetre dans laquelle n'importe qui peut poster un commentaire sur le site. Le tt est stocker dans une base
Protection des fichiers php [ par costou ]
Bonjour,Je suis un professionnel qui vend des applications Internet. Elles consistent à informatiser la gestion du système d'information (clients, com
protection de page [ par krapoulos ]
Bonjour,Voila cela fait 2 mois que je rame pour trouver un script.Je m'explique, j'ai une page (index) qui se trouve apres avoir passer allopass ( dc
Protection d' image original [ par overbrave ]
Salut Dieu du code,Je sais qu'il existe toute sorte de script ou fonction permettant de bloquer le clique droit, etc ...Ces fonction sont sencé n
protection d'un dossier [ par hooss ]
salut ! je suis nouveau dans ce site, et ceci est mon premier message je me demande si qcq sait comment protéger un fichier ou un repertoire dans
Protection d'un site inpi ? [ par laubro ]
Bonjourj'ai developpé un module de vente/reservation de chambre d'hôtel en php, à intégrer dans n'importe quel site d'hôtels.
protection de certaine page [ par mike501 ]
bonjour , je vien de creer mon site mais je voudrai que certaine soit masquer que personne ne puisse y acceder a part moi comment faire regarder&
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
CHAMPS TIMECHAMPS TIME par vargas
Cliquez pour lire la suite par vargas
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|