La Communauté Webmaster  forum rss


  Forum-webmaster
  Technique - programmation
  PHP / MySQL
(Modérateurs: Shain, Jey, erwinol, Lilian, lauryv, ToToMaStEr)
  Formulaire de contact (avis sur code)
« Précédent Suivant »
Pages: [1] Descendre
Répondre    Aviser des réponses    Envoyer le sujet    Imprimer
  Auteur  Sujet: Formulaire de contact (avis sur code)  (Lu 1385 fois)
Formulaire de contact (avis sur code)
« sur: le 29-10-2010 a 11:44:52 »
Bluely
Membre récent
*

Hors-Ligne

Sexe: Femelle
Messages: 56





Voir le Profil
Répondre avec citation

Bonjour,

Je suis entrain de faire un script pour l'envoi de formulaire par mail. J'aimerais avoir votre avis sur ce code. Il y a t-il des disfonctionnements, des bugs, des failles en ce qui concerne la sécurité?
En gros des conseils pour l'améliorer seraient les bienvenus.
Merci par avance



Voici mon code
Code:
<?php


$_POST['nom'] = trim($_POST['nom']);
$_POST['mail'] = trim($_POST['mail']);
$_POST['message']= trim($_POST['message']); 


if (isset ($_POST['nom'])  && isset($_POST['mail']) && isset($_POST['message']))
{

extract($_POST) ; // pour éviter d'écrire a chak fois $_POST
if(!empty($nom)  && !empty($mail)  && !empty($message)  ){


if(strlen($nom) <= 2){
   print("- Le champ nom est mal rempli");
   return false;
   }
   
   
if(!preg_match("/^[\w\.-]+@[\w\.-]+\.[a-z]{2,3}$/i", $mail)){
   print("- Adresse invalide !!");
   return false;
   }



$destinataire = "monadresse@.fr";
$objet = "Réponse au formulaire";



$corpsDuMail = "Nom : $nom
eMail : $mail

Message :$message";

mail($destinataire, $objet, $corpsDuMail, "de: $mail");


echo "<center><b>Les informations ont bien été transmises.</b></center>";
}
else{
echo "<center><b>L'envoi du courriel a échoué.</b></center>";
}
}

?>

« Dernière Édition: le 29-10-2010 a 11:54:20 par Bluely » Rapporter au modérateur  

Re:Formulaire de contact (avis sur code)
« Répondre #1 sur: le 29-10-2010 a 22:36:19 »
Bluely
Membre récent
*

Hors-Ligne

Sexe: Femelle
Messages: 56





Voir le Profil
Répondre avec citation

Oui oui c'est encore moi. J'ai vraiment besoin d'avoir un avis sur ce code.
Quelqu'un pourrait m'éclairer?
Merci beaucoup

Rapporter au modérateur  
Re:Formulaire de contact (avis sur code)
« Répondre #2 sur: le 30-10-2010 a 02:57:22 »
souifi
Membre récent
*

Hors-Ligne

Messages: 25



Je suis un lama!

Voir le Profil
Répondre avec citation

Code:
<?php
// Si "magic_quotes_gpc" est activé sur le serveur, on supprime les Antislash.
if(get_magic_quotes_gpc())
    $_POST = stripslashes($_POST);

// On vérifie que les champs existent et ne sont pas vide.
if(isset($_POST['nom'], $_POST['mail'], $_POST['message']) && !empty($_POST['nom']) && !empty($_POST['mail']) && !empty($_POST['message'])){
   
    // On vérifie le format de l'adresse E-mail
    if(!filter_var($_POST['mail'], FILTER_VALIDATE_EMAIL))
        $notice = 'Votre adresse E-mail n\'ai pas valide';
       
    // On vérifie le nom est composé d'un minimum de 3 caractères.
    if(strlen($_POST['nom']) < 3)
        $notice = 'Votre nom doit contenir un minimum de 3 caractères.';
       
    // On vérifie le corp du message est composé d'un minimum de 15 caractères.
    if(strlen($_POST['message']) < 15)
        $notice = 'Votre message est trop court.';
   
    // Si on a passé les vérifications sans problemes: Envois du mail...   
    if(!isset($notice)){       
        $destinataire  = $_POST['mail'];
        $expediteur    = "your@email.com";
        $objet          = "Réponse au formulaire";
        $reply_to      = $expediteur;
       
        $headers  = "From: $expediteur<$expediteur>\r\n";
        $headers .= "Reply-To: $reply_to\r\n";
        $headers .= "Content-Type: text/html; charset=utf-8\r\n";
       
        $texte  = htmlentities($_POST['nom'], ENT_QUOTES, 'utf-8') . '<br />';
        $texte .= htmlentities($_POST['message'], ENT_QUOTES, 'utf-8');
       
        // Envois du mail
        if(!mail($destinataire, $objet, $texte, $headers))
            $notice = 'L\'envoi du courriel a échoué.';
        else
            $notice = 'Votre message à bien été transmis.';
    }
   
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Formulaire</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
    <form action="" method="post">
        <input type="text" name="nom" /><br />
        <input type="text" name="mail" /><br />
        <textarea name="message"></textarea><br />
        <input type="submit" /><br />
        <p><?php echo isset($notice) ? $notice : false; ?></p>
    </form>
</body>
</html>

« Dernière Édition: le 30-10-2010 a 02:58:20 par souifi » Rapporter au modérateur  
Re:Formulaire de contact (avis sur code)
« Répondre #3 sur: le 30-10-2010 a 12:52:11 »
Bluely
Membre récent
*

Hors-Ligne

Sexe: Femelle
Messages: 56





Voir le Profil
Répondre avec citation

Oh merci beaoucoup Souifi pour ce code. Il est déjà tout fait .
Mais le truc c'est que j'aimerais aussi avoir un avis sur mon code à moi. Que l'on me dise ce qui ne va pas ou ce qui manque.
Merci pour votre aide!

Rapporter au modérateur  
Re:Formulaire de contact (avis sur code)
« Répondre #4 sur: le 30-10-2010 a 17:33:44 »
souifi
Membre récent
*

Hors-Ligne

Messages: 25



Je suis un lama!

Voir le Profil
Répondre avec citation

-Le seul traitement que tu effectue sur tes données est trim(), cela ne protège en rien mais supprime seulement les espaces au début et fin de variable. si tu veut éviter tout code malveillant il existe plusieurs fonctions  php comme htmlentities.
Je te conseil donc de faire par exemple:

Code:

$message = htmlentities(trim($_POST['message']), ENT_QUOTES, 'utf-8');

-Tu fait des vérification sous forme de conditions et non fonctions, donc il n'y a rien à retourner

Code:

if(strlen($nom) <= 2){
  print("- Le champ nom est mal rempli");
  return false; // Ligne à supprimer
}

if(!preg_match("/^[\w\.-]+@[\w\.-]+\.[a-z]{2,3}$/i", $mail)){
  print("- Adresse invalide !!");
  return false; // Ligne à supprimer
}

-Sinon a toi de créer tes propre fonctions de vérifications, il te restera plus que a les appeler.

Code:

function verif_lengths($string, $length){
    if(strlen($string) < $length){
        return false;
    }else{
        return true;
    }
}

if(!verif_lengths($nom, 3)){
    echo 'votre champ est inférieur à 3 caractères';
}

-Pour vérifier l'adresse email, il y a déjà une fonction toute faite, pas besoin d'utiliser un preg_match, utilise filter_var avec le filtre "FILTER_VALIDATE_EMAIL"

-Au niveau de l'envoie de mail, le dernier paramètre sont les entêtes, Doc function mail(), chaque entête doivent être séparés par un caractère CRLF (\r\n).
moi j'utilise en principe les 3 suivants:

Code:

$entete = "From: $mail_expediteur<$mail_expediteur>\r\n Reply-To: $mail_expediteur\r\n Content-Type: text/html; charset=utf-8\r\n";


Pour finir tu indique que le mail est envoyé à la seul condition que $nom, $mail, $message existent et ne doivent pas vide.... Pourquoi avoir donc fait des vérif? valide l'envoie au client seulement après être certain que le mail soit partit.

Code:

$mail =  mail($destinataire, $objet, $texte, $entetes);

if($mail){
    // Si le mail a été bien envoyé
    echo 'mail envoyé';
}


Suis pas douer pour les explication, je sais. J'espère que sa t'auras apporté un peu quand même.

Rapporter au modérateur  
Re:Formulaire de contact (avis sur code)
« Répondre #5 sur: le 31-10-2010 a 14:16:09 »
Bluely
Membre récent
*

Hors-Ligne

Sexe: Femelle
Messages: 56





Voir le Profil
Répondre avec citation

Encore merci! Oui oui tu as très bien expliqué, merci pour tes conseils.

Rapporter au modérateur  
Re:Formulaire de contact (avis sur code)
« Répondre #6 sur: le 13-11-2010 a 22:38:42 »
jb_gfx
Superactif
****

Hors-Ligne

Sexe: Male
Messages: 562





Voir le Profil    WWW
Répondre avec citation

htmlspecialchars() plutôt que htmlentities(), ça évitera de convertir les caractères accentués en entitées HTML (ce qu'on ne fait plus depuis les années 90 :p).

Rapporter au modérateur  

http://www.pixemedia.com
Re:Formulaire de contact (avis sur code)
« Répondre #7 sur: le 27-11-2010 a 19:02:22 »
Bluely
Membre récent
*

Hors-Ligne

Sexe: Femelle
Messages: 56





Voir le Profil
Répondre avec citation

Encore merci

Rapporter au modérateur  
Re:Formulaire de contact (avis sur code)
« Répondre #8 sur: le 03-01-2011 a 19:32:49 »
Swatt
P'tit nouveau
**

Hors-Ligne

Sexe: Male
Messages: 142





Voir le Profil    WWW    E-Mail
Répondre avec citation

Ce que les collègues ont très bien expliqué est en fait une bonne protection contre ce que nous appelons les failles XSS.

Je te dirais aussi de passer à PDO pour améliorer encore le tout !

Rapporter au modérateur  

Siret 50809232700016
Cabinet assurance Suisse
Agence relation publique Suisse
Répondre    Aviser des réponses    Envoyer le sujet    Imprimer
Pages: [1] Monter
« Précédent Suivant »
Sauter à: 

Votre statut : Invité
Vous devez être membre pour participer.
 
 
Let’s Encrypt : le certificat SSL gratuit
Tester votre site internet sur différents navigateurs
[WordPress] Des problèmes avec l’administration ?
Rappel : Mettez à jour vos CMS et vos sites E-commerce
Le .fr fête ses 25 années d’existence !
Mesurer votre audience en temps réel avec BubbleStat
Porter réclamation contre Google Panda ?
Zlio n’est plus …
 
 
 
 
 

Copyright (c) Devclic 2002 - 2026 - Tous droits réservés

creation site internet strasbourg