Script de création de compte avec captcha
Bonjour, voici une de mes créations:
Une page d'inscription entièrement codée par moi qui dispose d'un petit système de captcha simplifié avec deux chiffres.
Page config.php:
Code :
<?php
$host = 'localhost';
$user = 'root';
$pass = '';
$connexion = mysql_connect($host ,$user ,$pass) or die(mysql_error());
$realmd = 'realmd';
?>

Page inscription.php:
Code :
<?php
session_start();
error_reporting(0);
include('config.php');        
            switch ($_GET['action'])
        {
        case "":

                        echo'
                            <h1>Inscription</h1>
                            <form method="post" action="inscription.php?action=valide">
                        <p>';
                        $nb1 = rand(3, 10);
            $nb2 = rand(3, 10);
            $result = $nb1 + $nb2;
            echo'
                    Votre inscription sera effective d&egrave;s que vous aurez rempli ce formulaire :<br />
                    <br />
                    Nom de compte : <input type="text" name="username"/><br />
                    Adresse email : <input type="text" name="email"/><br />
                    Mot de passe : <input type="password" name="password"/><br />
                    Repetez le mot de passe : <input type="password" name="passwordrepeat"/><br />
                    Extension :
                                        <select name="extension">
                                            <option value="2"><font color="#006666">Wrath of the Lich King</font></option>
                                            <option value="1">Burning Crusade</option>
                                            <option value="0">World of Warcraft</option>
                                        </select>
                    <br />
                    '.$nb1.' + '.$nb2.' = <input type="text" name="captcha" /><br />
                    <br />
                    <input type=hidden name=result value='.$result.'>
                    <input type="submit" name="ok" value="Envoyer" /><br /><br />
                    Version '.$version.'<br />'.$realmlist.'
                        </p>
                    </form>';
                    break;
                    
        case "valide":
        $date = date('Y-m-d H:i:s');
        $username = $_POST['username'];
        $cuser = strlen($username);
        $email = $_POST['email'];
        $password = $_POST['password'];
        $expansion = $_POST['extension'];
        $passrep = $_POST['passwordrepeat'];
        $captcha = $_POST['captcha'];
        $resultat = $_POST['result'];
        $cpass = strlen($password);
                if (preg_match('#INSERT|SELECT|UNION|FROM|WHERE|DELETE#', $username) OR preg_match('#INSERT|SELECT|UNION|FROM|WHERE|DELETE#', $email) OR preg_match('#INSERT|SELECT|UNION|FROM|WHERE|DELETE#', $password) OR preg_match('#INSERT|SELECT|UNION|FROM|WHERE|DELETE#', $captcha) OR preg_match('#INSERT|SELECT|UNION|FROM|WHERE|DELETE#', $passrep))
        {
        echo 'Injection SQL detectee.<br /><a href=inscription.php>Reessayer</a>';
        }
        else {
            if (empty($username) OR empty($captcha) OR empty($email))
    {
    echo '- Tous les champs ne sont pas remplis.<br /><a href=inscription.php>Reessayer</a>';
    $remp = 0;
    }
    else {
    $remp = 1;    
        
//                 PARTIE NOM DE COMPTE        
    if ($cuser < 3)
    {
    echo '- Le nom d\'utilisateur choisi est trop court.<br /><a href=inscription.php>Reessayer</a>';
    $userlok = 0;
    }
    else
    {
    $cuserok = 1;
mysql_select_db($realmd,$connexion) or die(mysql_error());
$cacc=mysql_query('SELECT COUNT(*) AS numberacc FROM account WHERE username=\'' .$username.'\'') or die ("Erreur requette SQL");
$countacc = mysql_fetch_assoc($cacc);
    if ($countacc['numberacc'] == 1)
    {
    echo '- Le nom d\'utilisateur est d&eacute;j&acirc; pris.<br /><a href=inscription.php>Reessayer</a>';
    $coacc = 0;
    }
    else {
    $coacc = 1;
    //                 PARTIE ADRESSE EMAIL

    $mail=mysql_query('SELECT COUNT(*) AS numbermail FROM account WHERE email=\'' . $email.'\'') or die ("Erreur requette SQL");
$datam = mysql_fetch_assoc($mail);
if ($datam['numbermail'] >=1)
{
echo '- L\'email est d&eacute;j&acirc; utilis&eacute;e.<br /><a href=inscription.php>Reessayer</a>';
$emailco = 0;
}
else
{
$emailco = 1;
if(!preg_match('#^[a-z0-9.-_]+@[a-z0-9.-_]{2,}\.[a-z]{2,4}$#', $email))
{
echo '- L\'email est incorrect.<br /><a href=inscription.php>Reessayer</a>';
$emailch = 0;
}
else
{
$emailch = 1;

//                 PARTIE MOT DE PASSE
if ($cpass < 3)
    {
    echo '- Le mot de passe choisi est trop court.<br /><a href=inscription.php>Reessayer</a>';
    $passlok = 0;
    }
else
{
$passlok = 1;


//                 PARTIE CAPTCHA
if ($captcha==$resultat)
{
if ($password==$passrep)
{
$passmat = 1;
mysql_select_db($realmd,$connexion) or die(mysql_error());
$id = mysql_query("SELECT * FROM account ORDER BY id DESC LIMIT 1");
$lo = mysql_fetch_assoc($id);
$idacc = $lo["id"] + 1;
$ip = $_SERVER['REMOTE_ADDR'];
$passw = sha1($password);
mysql_query("INSERT INTO account VALUES ('$idacc','$username', '$passw', 0, '', '', '', '$email', '$date', '$ip', 0, 0, '$date', 0, '$expansion', 0, 2, 0, '2011-05-20 04:21:37', '$date', '2011-05-20 04:21:37', '$date')")
or die ("Erreur lors de la creation du compte");
                        echo '<p class="info"><br /><br /><br />Votre enregistrement a &eacute;t&eacute; effectu&eacute; avec succes !<br /></p>';            
        }
        else
{
echo '- Les mots de passe ne sont pas identiques.<br /><a href=inscription.php>Reessayer</a>';
$passmat = 0;
}

}
if ($captcha != $resultat)
{
echo '- Le code de verification est faux.<br /><a href=inscription.php>Reessayer</a><br />';
$captchaok = 0;
}

}
}
}
}
}
}

}
break;
}
?>
Truc de fou comment le système de captcha est pourri. Truc de fou comment tu devrais te documenter sur la sécurité.
Pour le coup la méthode des deux chiffres.. les brutes force actuels passent dessus comme si c'était une feuille de papier...
Pire.
<input type=hidden name=result value='.$result.'>

Retourner en haut Accueil