IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Sécuriser un formulaire


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 483
    Par défaut Sécuriser un formulaire
    Bonjour,

    je dois sécuriser un formulaire contre les attaques.

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     
    function securise($texte){
    	return htmlentities($texte, ENT_QUOTES);
    }
     
    if(isset($_POST["nom"]) and isset($_POST["prenom"]) and isset($_POST["email"])  and isset($_POST["sujet"]) and isset($_POST["message"])and !empty($_POST["nom"])  and !empty($_POST["email"]) and !empty($_POST["message"])){
     
        if(!filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)){
    		header('Location: contact.php?message=email&nom='.$_POST['nom'].'&prenom='.$_POST['prenom'].'&email='.$_POST['email'].'&telephone='.$_POST['telephone'].'&sujet='.$_POST['sujet'].'&demande='.$_POST['message']);
    		exit();
    	}
     
    	$nom = securise($_POST['nom']);
    	$prenom = securise($_POST['prenom']);
    	$email = securise($_POST['email']);
    	$sujet = securise($_POST['sujet']);
            $message = securise(utf8_encode($_POST['demande']));
     
    	$headers = 'From:'.$prenom." ".$nom.' <'.$email.'>' . "\r\n" .
    					'Reply-To:'.$email. "\r\n" ;
     
     
        mail('exemple@yahoo.fr', $sujet, $message, $headers);
        header('Location: contact.php?message=ok');
     
    ....
    Le problème est que lorsque je teste l'envoi du mail il n'y a dans le mail d'arrivée ni le nom et prénom de l'expéditeur ni le sujet du message alors que ces informations y sont si je supprime la fonction securise.

    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 60
    Par défaut
    Bonjour,

    Effectivement cela est bizarre je trouve,
    Pouvez vous faire un var_dump de la variable $headers avec et sans la fonction securise ?

    La fonction htmlentities() renvoie une chaine de caractere qui formate mal la variable $headers, ce qui explique la non présence des sujet/nom/prenom.

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 483
    Par défaut
    Je ne comprends pas le var_dump sur $headers avec securise ne donne pas de problème le nom et prénom etc sont bien affichés, c'est donc au niveau de la fonction mail que cela ne passe pas je ne sais pas pourquoi.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 60
    Par défaut
    Rebonjour,

    Faire un var_dump sur la variable $headers signifie juste d'utiliser la fonction var_dump qui permet de voir le contenu d'une variable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //A mettre juste aprèss l'initialisation de la variable
    var_dump($headers);
    d'un autre côté, si avec la fonction securise, la fonction mail ne fonctionne pas, et si sans il n'y a pas de soucis, c'est que les données qui sont formaté par la fonction securise posent probleme, ce n'est pas la fonction mail() qui est en tort.

    C'est pour cela essaye de voir le contenu des variables avec
    et
    avec et sans la fonction securise afin de voir les différences.

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 483
    Par défaut
    le var_dump sur $headers et $sujet affiche la même chose au niveau du contenu des variables que ce soit avec ou sans securise alors que c est le type de la variable qui change avec securise ou sans securise:
    c'est string(12) pour $sujet avec securise string(5) pour $sujet sans securise string(86) pour $headers avec securise et string(72) pour $headers sans securise

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 60
    Par défaut
    Alors c'est qu'il y a effectivement un changement :
    Sans securise :
    $headers = string(72)
    $sujet = string(86)

    Avec Securise :
    $headers = string(12)
    $sujet = string(5)

    Pour information String(xx), signie une chaine de caractere composé de xx caractères.
    Ta fonction securise() tronque completement tes variables, ca explique que ca ne passe pas dans la fonction mail()
    Pourrais tu faire un copier/coller de tes var_dump() ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. sécuriser un formulaire par une équation
    Par aboura86 dans le forum Langage
    Réponses: 8
    Dernier message: 03/07/2008, 19h03
  2. Sécuriser mon formulaire
    Par isa150183 dans le forum Langage
    Réponses: 3
    Dernier message: 07/10/2007, 19h34
  3. Sécuriser un formulaire
    Par Z3c33 dans le forum Sécurité
    Réponses: 3
    Dernier message: 25/05/2007, 15h52
  4. Sécuriser un formulaire
    Par jerem78 dans le forum Sécurité
    Réponses: 2
    Dernier message: 07/06/2006, 18h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo