Version complète: sur le forum Webmaster Hub : Formulaire avec captcha
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
toucheservice
Bonjour,
voila j'ai un formulaire de commande avec un captcha, le formulaire fonctionne bien et le captcha aussi mais le probleme qui se pose c'est ou inseret le code de vérification du captcha.
je vous envoi mon script pour mieu comprendre, tel qu'il est le porbleme est que quand les champs du formulaire sont rempli est exacte il est possible d envoyer les données sans remplir le code du captcha.


CODE
<?php
$cryptinstall="./crypt/cryptographp.fct.php";
include $cryptinstall;  
?>

<?php
  if (chk_crypt($_POST['code']))
     echo "<a><font color='#009700'>=> Bravo, vous avez saisi le bon code !</font></a></br>";
     else echo "<a><font color='#FF0000'>=> Erreur, le code est incorrect</font></a></br>";
?>

CODE
<?php

$msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement remplis :<br/><br/>";
$msg_ok = "Votre demande a bien été prise en compte.";
$message = $msg_erreur;
define('MAIL_DESTINATAIRE','xxxxxx_AT_xxxxx.xx';
define('MAIL_SUJET','yyyyyyyyyyyyyyyyyyyyy');
// vérification des champs
if (empty($_POST['Nom'])) $message .= "Votre Nom<br/>";
if (empty($_POST['Prenom'])) $message .= "Votre Prénom<br/>";
if (empty($_POST['Adresse'])) $message .= "Votre adresse<br/>";
if (empty($_POST['Ville'])) $message .= "Votre Ville<br/>";
if (empty($_POST['CP'])) $message .= "Votre code postal<br/>";
if (empty($_POST['Mail'])) $message .= "Votre adresse mail<br/>";
if (empty($_POST['Phone'])) $message .= "Votre numéro de téléphone<br/>";
if (empty($_POST['Login'])) $message .= "Votre Login ftp<br/>";
if (empty($_POST['Pass'])) $message .= "Votre mot de passe<br/>";

// si un champ est vide, on affiche le message d'erreur
if (strlen($message) > strlen($msg_erreur)) { echo $message;

// sinon c'est ok
} else {foreach($_POST as $index => $valeur) {$$index = stripslashes(trim($valeur));
}$interets = $_POST['interets'];$sqlinterets = '';
for ($i=0; $i<count($interets); $i++){$sqlinterets .= $interets[$i];$sqlinterets .= ', ';
}
//Préparation de l'entête du mail:
$mail_entete = "MIME-Version: 1.0\r\n";
$mail_entete .= "From: {$_POST['Nom']} "
."<{$_POST['email']}>\r\n";
$mail_entete .= 'Reply-To: '.$_POST['Mail']."\r\n";
$mail_entete .= 'Content-Type: text/plain; charset="iso-8859-1"';
$mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
$mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";
// préparation du corps du mail
$mail_corps .= "Message de :$Nom $Prenom\n";
$mail_corps .= "Adresse : $Adresse, $CP $Ville\n";
$mail_corps .= "Adresse e-mail : $Mail\n";
$mail_corps .= "Numéro de téléphone : $Phone\n";
$mail_corps .= "Login et password : $Login , $Pass\n";
$mail_corps .= "Pack demandé : $Pack\n";
$mail_corps .= "Type d'acces : $Acces\n";
$mail_corps .= "Type du serveur : $TypeSrv\n";
$mail_corps .= "Type du payement : $Paiement\n";
$mail_corps .= "Forfait : $Forfait\n";
// envoi du mail
if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete)) {
//Le mail est bien expédié
echo $msg_ok;} else {
//Le mail n'a pas été expédié
echo 'Une erreur est survenue lors de l\'envoi du formulaire par email';
}
}
?>

est ce que qqn peux m'aider a palcer le code du captcha pour éviter cela???
Merci
Dan
Comme tu ne vérifies aucun champ avant d'envoyer le mail, tu risques très vite de transformer ce formulaire en paradis pour spammeurs !
Attention aux injections d'entête !

Voir ce lien pour les explications: http://www.securephpwiki.com/index.php/Email_Injection
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.