Bonsoir,
J'ai créer un formulaire pour permettre à mes visiteurs de me contacter afin des informations comme :
*Nom
*Prénom
*Email
*Téléphone
*Adresse
*Fichier joint (photo)
Quelles fonctions pourrais-je utiliser afin de sécuriser au maximum les données transmises sachant qu'elles ne sont pas sauvegardées en BDD mais juste envoyée par mail avec toutes les informations enregistrées lors de la saisie du formulaire.
$nom = stripslashes($inputNom);
Est-ce suffisant ?
Bonjour, vous pouvez plus sécurisé en faisant ça :
$nom = addslashes(mysql_real_escape_string(htmlentities(trim($_POST'inputNom']))));
En espérant vous avoir aidé.
Voici le code de mon formulaire :
<form class="form-horizontal well" id="formulaire" method="post" action="<?php echo Router::url('pages/veriformrdv'); ?>" name="formulaire" enctype="multipart/form-data">
<fieldset>
<legend>Formulaires de prise de rendez-vous</legend>
<h6>Merci de le compléter le plus précisément possible</h6>
<input type="datetime-local" name="rdv">
<div class="form-group">
<label for="inputNom" class="col-lg-2 control-label">Nom :</label>
<div class="col-lg-4">
<input type="text" title="Votre nom" class="form-control" id="inputNom" name="inputNom" autofocus placeholder="Nom" pattern="^[a-zA-Z][a-zA-Z0-9-_\.]{1,20}$" required>
</div>
</div>
<div class="form-group">
<label for="inputPrenom" class="col-lg-2 control-label">Prénom :</label>
<div class="col-lg-4">
<input type="text" title="Votre prénom" class="form-control" id="inputPrenom" name="inputPrenom" placeholder="Prénom" pattern="^[a-zA-Z][a-zA-Z0-9-_\.]{1,20}$" required>
</div>
</div>
<div class="form-group">
<label for="inputEmail" class="col-lg-2 control-label">Email :</label>
<div class="col-lg-4">
<input type="text" title="Votre email" class="form-control" id="inputEmail" name="inputEmail" placeholder="email@fournisseur.fr" pattern="^@]+@^@]+\.[a-zA-Z]{2,6}" required>
</div>
</div>
<div class="form-group">
<label for="inputTel" class="col-lg-2 control-label">Téléphone :</label>
<div class="col-lg-2">
<input type="tel" title="Votre téléphone" class="form-control" id="inputTel" name="inputTel" placeholder="0601020304" pattern="^(?:0|\(?\+33\)?\s?|0033\s?)[1-79](?:\.\-\s]?\d\d){4}$" required>
</div>
</div>
<div class="form-group">
<label for="textArea" class="col-lg-2 control-label">Décrivez votre situation :</label>
<div class="col-lg-5">
<textarea class="form-control" title="Votre situation actuelle" rows="3" id="textArea" name="monCas" required></textarea>
<span class="help-block">Décrivez votre situation brièvement ici (<i>Vous pouvez étirez la fenêtre</i>)</span>
</div>
</div>
<div class="form-group">
<label for="photo_client" class="col-lg-2 control-label">Photo : <br> (<i>Max. 1Mo</i>)</label>
<div class="col-lg-4">
<input type="hidden" name="MAX_FILE_SIZE" value="1048576" />
<input type="file" name="photo_client" id="photo_client" class="form-control" placeholder="Votre Photo">
<span class="help-block">Tout type de format (<i>Max. 1Mo</i>)</span>
</div>
</div>
<div class="form-group">
<div class="col-lg-5 col-lg-offset-2">
<button type="submit" class="btn btn-primary">Prendre rendez-vous</button>
<button class="btn btn-default" type="reset">Effacer les champs</button>
</div>
</div>
</fieldset>
</form>
Et voici celui de ma page de traitement de données
<?php
// Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
if (isset($_FILES'photo_client']) AND $_FILES'photo_client']'error'] == 0)
{
// Testons si le fichier n'est pas trop gros
if ($_FILES'photo_client']'size'] <= 1000000)
{
// Testons si l'extension est autorisée
$infosfichier = pathinfo($_FILES'photo_client']'name']);
$extension_upload = $infosfichier'extension'];
$extensions_autorisees = array('jpg', 'JPG', 'jpeg', 'JPEG', 'gif', 'GIF', 'png', 'PNG');
if (in_array($extension_upload, $extensions_autorisees))
{
// On peut valider le fichier et le stocker définitivement
if(move_uploaded_file($_FILES'photo_client']'tmp_name'], '../view/pages/uploads/' . basename($_FILES'photo_client']'name'])))
{
echo "Votre photo à bien été sauvegardée !";
echo "<br/>";
$NamePhotoSave = $_FILES'photo_client']'name'];
}
else{
echo "Erreur lors du transfert du fichier, veuillez réessayer svp !";
echo "<br/>";
}
}
else{
echo "Vous n'êtes pas autorisé à envoyer ce type de fichier, veuillez svp en sélectionner un autre";
}
}
}
// Si le formulaire est envoyé
if (isset($_POST'inputNom']) && !empty($_POST'inputPrenom']) && !empty($_POST'inputEmail']))
{
/* Récupération des variables issues du formulaire
$nom = (isset($_POST'inputNom']) && trim($_POST'inputNom']) != '')
$prenom =
$email =
$tel =
$moncas =
$nomfichier =
$nomphotoclient =
//Préparation de la variable qui affichera la date envoi du formulaire dans le mail.
date_default_timezone_set('Europe/Paris');
$timestamp = time();
?>
Si tu envoies ton mail en texte, et non en html, alors il n'y a rien a sécuriser. C'est encore l'option qui me parait la plus simple.
Et de toute façon a moins que tu proposes un éditeur html pour te contacter, je ne verrais pas bien pourquoi tu aurais besoin de t'envoyer du contenu html.
Et bien en fait j'envoi le mail en html .... voici le formulaire :
//------------------------------ Envoie identifiants par mail après inscription OK -----------------------------------
$mail = 'toto@gmail.com'; // Déclaration de l'adresse de destination.
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui présentent des bogues.
{
$passage_ligne = "\r\n";
}
else
{
$passage_ligne = "\n";
}
//=====Déclaration des messages au format texte et au format HTML.
$message_txt = "Bonjour, voici une récapitulatif de votre demande de rendez-vous.";
$message_html = "
<html>
<head></head>
<body>
Bonjour <b>$HF $nom $prenom</b>,
<br/>
<br/>
<u>Voici le récapitulatif de votre demande de rendez-vous</u> :
<br/>
- Vous avez demandez un rendez-vous le <strong>$jrdv/$mrdv/$ardv à $heure"."h"."$minute</strong><br/>
<br/>
<u>Voici vos informations de contact</u> : <br/>
- Votre numéro de téléphone : <b>$tel</b> <br/>
- Votre adresse email : <b>$email</b> <br/>
<br/>
<u>Voici vos informations personnelles</u> : <br/>
- Pays d'origine : <b>$origine</b> <br/>
- Date de naissance : <b>$jnaiss/$mnaiss/$anaiss</b> <br/>
<br/>
<u>Voici le déscriptif de votre situation</u> : <br/>
- <i>$moncas</i> <br/>
<br/>
Merci d'attendre la confirmation par email de votre rendez-vous avec titi<br/>
<br/>
Votre prise de contact à été effectuée le <strong>".date('d/m/Y', $timestamp)." à ".date('H:i:s', $timestamp)."</strong> <br/>
<br/>
<b>titi Cie</b>
<br/>
<i>Contact par email : titi@gmail.com - Contact par tel : 0610203040</i>
</body>
</html>";
//==========
//=====Lecture et mise en forme de la pièce jointe.
$fichier = fopen('../view/pages/uploads/' . basename($_FILES'photo_client']'name']), "r");
$attachement = fread($fichier, filesize('../view/pages/uploads/' . basename($_FILES'photo_client']'name'])));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);
//==========
//=====Création de la boundary.
$boundary = "-----=".md5(rand());
$boundary_alt = "-----=".md5(rand());
//==========
//=====Définition du sujet.
$sujet = "Votre demande de rendez-vous avec titi";
//=========
//=====Création du header de l'e-mail
$header = "From: \"titi\"<toto@gmail.com>".$passage_ligne;
$header .= "Reply-to: \"titi\" <toto@gmail.com>".$passage_ligne;
$header .= "MIME-Version: 1.0".$passage_ligne;
$header .= "X-Priority: 3".$passage_ligne;
$header .= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//==========
//=====Création du message.
$message = $passage_ligne."--".$boundary.$passage_ligne;
$message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
//=====Ajout du message au format texte.
$message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_txt.$passage_ligne;
//==========
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
//=====Ajout du message au format HTML.
$message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
//==========
//=====On ferme la boundary alternative.
$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
//==========
$message.= $passage_ligne."--".$boundary.$passage_ligne;
//=====Ajout de la pièce jointe.
$message.= "Content-Type: image/jpeg; name=\"$nomphotoclient\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=\"$NamePhotoSave\"".$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
//==========
//=====Envoi de l'e-mail.
if(mail($mail,$sujet,$message,$header)) //mail('email_destinataire', 'sujet', 'message', entete supplementaire);
{
echo 'Votre demande de rendez-vous a bien été envoyée à titi.<br />
Vous allez recevoir un récapitulatif par email.<br />
<br />
PENSEZ A VERIFIER VOTRE DOSSIER SPAM AVANT DE FERMER CETTE PAGE<br />
Réactualiser cette page si vous ne recevez toujours pas l\' email d\'ici quelques minutes<br />
<br />
IMPORTANT : Veuillez attendre de recevoir un email de titi acceptant le rendez-vous.<br />
<a href = "http://localhost/titi/page/accueil-1">Cliquez ici pour revenir à l\'accueil</a>';
}
else
{
echo 'Le mail n\'a pu être envoyé';
}
}
//==========
//------------------------------ Envoie identifiants par mail après inscription OK -----------------------------------
?>
Bonjour,
Il y a strip_tags qui te permet de te protèger de certaines balises HTML.
Tu as aussi htmlentities ou htmlspecialchars.
Pour mysql_real_escape_string, il faut plus l'utiliser.
Je pars la-dessus du coup :
$nom = htmlentities(trim($_POST'inputNom']));
$prenom = htmlentities(trim($_POST'inputPrenom']));
$email = htmlentities(trim($_POST'inputEmail']));
$tel = htmlentities(trim($_POST'inputTel']));
$sexe = htmlentities(trim($_POST'sexe']));
$moncas = htmlentities(trim($_POST'monCas']));
$origine = htmlentities(trim($_POST'PaysOrigine']));
$jnaiss = htmlentities(trim($_POST'jnaiss']));
$mnaiss = htmlentities(trim($_POST'mnaiss']));
$anaiss = htmlentities(trim($_POST'anaiss']));
$jrdv = htmlentities(trim($_POST'jrdv']));
$mrdv = htmlentities(trim($_POST'mrdv']));
$ardv = htmlentities(trim($_POST'ardv']));
$heure = htmlentities(trim($_POST'hrdv']));
$minute = htmlentities(trim($_POST'minrdv']));
$nomfichier = htmlentities(trim($_FILES'photo_client']'name']));
Qu'en dis-tu ?