|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
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°
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
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
Sources en rapport avec celle ci
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&
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|