N-PN White-Hat Project
[Php] Ajouter un captcha facilement et rapidement - Version imprimable

+- N-PN White-Hat Project (https://dev.n-pn.fr/forum)
+-- Forum : Programmation (https://dev.n-pn.fr/forum/forumdisplay.php?fid=72)
+--- Forum : Langages interprétés (https://dev.n-pn.fr/forum/forumdisplay.php?fid=27)
+--- Sujet : [Php] Ajouter un captcha facilement et rapidement (/showthread.php?tid=1263)



[Php] Ajouter un captcha facilement et rapidement - CyberSee - 17-06-2011

Au travers de mes années de codage, y a une chose avec lequel je dois continuellement me battre ... Les maudits bots qui détectent et spam n'importe quel formulaire ... La seule façon de les empêcher de passer au travers du formulaire c'est dit ajouter ce que l'ont appelle un captcha qui consiste a demander au visiteur de taper le contenu d'une image dans une boîte.

Celui que j'utilise dans tous mes sites se nomme "CaptchaSecurityImages" (probablement un manque d'imagination de l'auteur lol)

CaptchaSecurityImages.php
Code PHP :
<?php
// Modifier par CyberSee

// Déclaration des session
session_start();

// Déclaration de la class
class CaptchaSecurityImages
{
    
    
// On load le nom de la font utilisé pour générer les caractères
    
var $font 'monofont.ttf';

    
// Fonction qui génère une string random alphanumérique
    
function generateCode($characters)
    {
        
// List de tous les caractères autoriser dans la string random
        
$possible '23456789bcdfghjkmnpqrstvwxyz';
        
$code '';
        
$i 0;
        while (
$i $characters) {
            
$code .= substr($possiblemt_rand(0strlen($possible) - 1), 1);
            
$i++;
        }
        return 
$code;
    }
    
    
// Création de l'image avec la librairie GD
    
function CaptchaSecurityImages($width '120'$height '40'$characters '6')
    {   
        
// On va chercher la string
        
$code $this->generateCode($characters);
        
// On détermine que le font va être a 75% en hauteur de l'espace disponible
        
$font_size $height 0.75;
        
// On créé le canvas de l'image
        
$image imagecreate($width$height) or die('Cannot initialize new GD image stream');
        
// On détermine l’arrière-plan de l'image
        
$background_color imagecolorallocate($image255255255);
        
// On détermine la couleur du texte
        
$text_color imagecolorallocate($image2040100);
        
// On détermine la couleur du bruitage
        
$noise_color imagecolorallocate($image100120180);
        
// On créé du bruitage en point dans l’arrière-plan 
        
for ($i 0$i < ($width $height) / 3$i++) {
            
imagefilledellipse($imagemt_rand(0$width), mt_rand(0$height), 11$noise_color);
        }
        
// On créé du bruitage en ligne dans l’arrière-plan 
        
for ($i 0$i < ($width $height) / 150$i++) {
            
imageline($imagemt_rand(0$width), mt_rand(0$height), mt_rand(0$width),
                
mt_rand(0$height), $noise_color);
        }
        
// On ajoute le texte a l'image
        
$textbox imagettfbbox($font_size0$this->font$code) or die('Error in imagettfbbox function');
        
$x = ($width $textbox[4]) / 2;
        
$y = ($height $textbox[5]) / 2;
        
imagettftext($image$font_size0$x$y$text_color$this->font$code) or die('Error in imagettftext function');
        
        
// On affiche l'image
        
header('Content-Type: image/jpeg');
        
imagejpeg($image);
        
imagedestroy($image);
        
        
// On active la session
        
$_SESSION['security_code'] = $code;
    }

}

// On va chercher les variables initialiser dans la source de limage
$width = isset($_GET['width']) && $_GET['width'] < 600 $_GET['width'] : '120';
$height = isset($_GET['height']) && $_GET['height'] < 200 $_GET['height'] : '40';
$characters = isset($_GET['characters']) && $_GET['characters'] > $_GET['characters'] : '6';

// On utilise la class
$captcha = new CaptchaSecurityImages($width$height$characters);

?>

Procédure d'utilisation:
1. Uploader le fichier CaptchaSecurityImages.php (en pièce attachée)
2. Uploader le fichier monofont.ttf http://maplaza.ca/administration/monofont.ttf (hoster gratuitement par moi ici)

Utilisation:
Dans le formulaire ou vous voulez faire apparaitre le captcha ajoutez

Code :
<img src="CaptchaSecurityImages.php?width=100&height=40&characters=3" /><br><br>
Sécurité:<br><input type="text" name="security_code" class="imput_box" style="border:1px;border-color:#000000; border-style: solid;" size="25">

Il ya 3 paramètres éditables passer en variable GET width=100 (La largeur de l'image) height=40 (La hauteur de l'image) characters=3 (Le nombre de caractères) -> C'est pas nécessairement plus sécurisé que d'avoir plus de caractère... c'est juste plus chiant pour l'utilisateur

À la validation, ajouter
Code PHP :
if( $_SESSION['security_code'] == $_POST['security_code'] && !empty($_SESSION['security_code'] ) ) {   
// Le code est bon    
} else {  
echo 
"- Désolé, vous devez copier le contenu de l'image dans le champ sécurité.<br>$err";   


Vous pouvez le voir en action sur ce site que j'ai fait
http://renovationrealite.com/index.php?mod=cyber

Veillez cité la source et l'auteur si vous désirer reprendre mon tuto.

Soyez intelligent et restez WhiteHat!
Par CyberSee


[PHP] Ajouter un captcha facilement et rapidement - CyberSee - 06-08-2011

Ah ouais dsl en voici un autre
[Image: captchaex.png]


[PHP] Ajouter un captcha facilement et rapidement - Armel - 07-08-2011

CyberSee a écrit :Au travers de mes années de codage, y a une chose avec laquelle je dois continuellement me battre... Les maudits bots qui détectent et spament n'importe quel formulaire... La seule façon de les empêcher de passer au travers du formulaire c'est dit ajouter ce que l'ont appelle un captcha qui consiste a demander au visiteur de taper le contenu d'une image dans une boîte

Ça ne marche que pour le bots floodeur sans bon OCR.
Un humain floodeur pourra trouver un faille dans ce bout de code lui permettant de spamer sans avoir à lire/écrire le captcha plus d'une fois.


[PHP] Ajouter un captcha facilement et rapidement - Zhyar - 08-08-2011

Super merci ! Je cherchais ça pour une page d’inscription, ça va m'être utile.


RE: Ajouter un captcha facilement et rapidement - InstinctHack - 29-02-2012

malheureusement, les captcha ne vont pas avec l'accebilité :/ il faut donc en plus un captcha audio...
sinon on peux rajouter un <input style=display:none;> et tester si il est rempli si oui c'est un robot Smile
(c'est une simple protection en plus, qui ne gene pas mais qui protege encore un peu plus Wink )


RE: Ajouter un captcha facilement et rapidement - (Y/n) - 02-04-2012

L'image produite est "cassée" :/ en gros je ne l'a vois pas ..

Comment puis je faire ?

Cordialement,


RE: Ajouter un captcha facilement et rapidement - InstinctHack - 03-04-2012

J'ai pas tester le code de CyberSee...
Par-contre je sais que je vais bientot commencer à coder un multi-captcha, genre dans 2 semaines ^^"

T'as quoi comme message d'erreur ??


RE: Ajouter un captcha facilement et rapidement - (Y/n) - 03-04-2012

Voila ce que j'ai :

[Image: 800886captcha.png]

Donc pour mettre un code c'est plus dur ^^


RE: Ajouter un captcha facilement et rapidement - InstinctHack - 03-04-2012

-_- bah c'est utf-8 quoi --"

met ça <meta charset="utf-8" />

EDIT : désolé je vient de me lever xD Et quand tu rentre l'url de l'image, c'est quoi le message d'erreur ??


RE: Ajouter un captcha facilement et rapidement - supersnail - 03-04-2012

A mon avis ça doit être un souci avec la php-gd qui doit pas être installé (ou activé) sur ta machine.

Regarde dans ton php.ini pour l'activer Wink


RE: Ajouter un captcha facilement et rapidement - (Y/n) - 03-04-2012

@sonn

Oui t'inquiète je vais changer le charset mais c'était vite fait j'avais pas le temps Tongue

@aaSSfxxx

Merci Smile
Mais j'ai trouvé c'étais une variable que j'avais modifié qui buggais ^^


RE: Ajouter un captcha facilement et rapidement - InstinctHack - 03-04-2012

Un peu hs mais bon....
Je veut pas critiquer le code de CyberSee mais, quel est l'interet de le faire en POO ?? une simple fonction suffit nan ?
Je voit pas l'utilité de le coder ainsi :p Je démarre en POO mais je suis avide de connaisance Wink

(l'autoload peut-etre ? dommage que ça existe pas pour les fonctions :/ )


RE: Ajouter un captcha facilement et rapidement - (Y/n) - 03-04-2012

Désoler de vous déranger encore :/

Mais c'est encore cette histoire d'image cassée ..
En local ça marche parfaitement, mais une fois que je mets en ligne le code ça me renvois au départ ...

Je suis actuellement hébergé sur 000webhost (gratuit)

Encore une fois désolé du dérangement occasionné.


RE: Ajouter un captcha facilement et rapidement - InstinctHack - 03-04-2012

C'est rien Wink
T'as mis aussi le ttf ? (ça arrive d'oublier :p )
sinon je sais que gb est activer sur cet hebergeur Wink


RE: Ajouter un captcha facilement et rapidement - supersnail - 04-04-2012

T'obtiens quelle erreur dans l'image sur 000webhost ?