Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

FORMMAIL SÉCURISÉ


Information sur la source

Catégorie :E-Mail / Messagerie Classé sous : formmail, sécurisé, multiple, email, messagerie Niveau : Initié Date de création : 19/06/2007 Date de mise à jour : 19/06/2007 11:09:56 Vu : 8 211

Note :
Aucune note

Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Script de formmail qui permet de recevoir un feedback des visiteurs de votre site... Le visiteur peut choisir entre plusieurs detinataire!
 

Source

  • <?php
  • // TITRE
  • echo"<h1>Contact</h1>\n";
  • // APPEL DES FONCTIONS
  • // AFFICHER
  • if(!$_POST)
  • {
  • formulaire_contact($connexion, $_POST);
  • }
  • // VERIFIER/ENVOYER
  • elseif($_POST)
  • {
  • // ON VERIFIE LES CHAMPS
  • if(verifier_contact($_POST))
  • {
  • envoyer_contact($connexion, $_POST);
  • }
  • else
  • {
  • formulaire_contact($connexion, $_POST);
  • }
  • }
  • // FORMULAIRE
  • function formulaire_contact($connexion, $_POST)
  • {
  • // ON DEFINIT LES VALEURS PAR DEFAUT
  • if(!($_POST))
  • {
  • $nom = 'Prénom et nom';
  • $adresse = 'Adresse';
  • $lieu = 'Code postal et lieu';
  • $email = '@';
  • $sujet = 'Sujet';
  • $texte = 'Texte';
  • $copie = 'on';
  • }
  • else
  • {
  • $nom = $_POST['nom'];
  • $adresse = $_POST['adresse'];
  • $lieu = $_POST['lieu'];
  • $email = $_POST['email'];
  • $sujet = $_POST['sujet'];
  • $texte = $_POST['texte'];
  • $texte = $_POST['copie'];
  • }
  • // FORMULAIRE
  • echo"<h2>Formulaire</h2>\n";
  • echo"<form action=\"contact.html\" method=\"post\">\n";
  • echo"<p><label for=\"contact\">Contact *</label><br />\n";
  • //CONTACTS
  • echo"<select name=\"contact\" id=\"contact\" title=\"Contact\" tabindex=\"1\">\n";
  • echo"<option selected=\"selected\">Webmaster</option>\n";
  • // AUTRES DESTINATAIRES VOIRE REQUETES MYSQL POUR SELECTIONNER DES GROUPES ETC.
  • echo"</select></p>\n";
  • // PRENOM ET NOM
  • echo"<p><label for=\"nom\">Prénom et nom *</label><br />\n";
  • echo"<input type=\"text\" name=\"nom\" id=\"nom\" value=\"".$nom."\" title=\"Prénom et nom\" tabindex=\"2\" onfocus=\"this.select();\" /></p>\n";
  • // ADRESSE
  • echo"<p><label for=\"adresse\">Adresse</label><br />\n";
  • echo"<input type=\"text\" name=\"adresse\" id=\"adresse\" value=\"".$adresse."\" title=\"Adresse\" tabindex=\"3\" onfocus=\"this.select();\" /></p>\n";
  • // CODE POSTAL ET LIEU
  • echo"<p><label for=\"lieu\">Code postal et lieu *</label><br />\n";
  • echo"<input type=\"text\" name=\"lieu\" id=\"lieu\" value=\"".$lieu."\" title=\"Lieu\" tabindex=\"4\" onfocus=\"this.select();\" /></p>\n";
  • // Email
  • echo"<p><label for=\"email\">Email *</label><br />\n";
  • echo"<input type=\"text\" name=\"email\" id=\"email\" value=\"".$email."\" title=\"Email\" tabindex=\"5\" onfocus=\"this.select();\" /></p>\n";
  • // SUJET
  • echo"<p><label for=\"sujet\">Sujet *</label><br />\n";
  • echo"<input type=\"text\" name=\"sujet\" id=\"sujet\" value=\"".$sujet."\" title=\"Sujet\" tabindex=\"6\" onfocus=\"this.select();\" /></p>\n";
  • // TEXTE
  • echo"<p><label for=\"texte\">Texte *</label><br />\n";
  • echo"<textarea name=\"texte\" id=\"texte\" cols=\"100\" rows=\"5\" title=\"Texte\" tabindex=\"7\" onfocus=\"this.select();\">".$texte."</textarea></p>\n";
  • // COPIE
  • echo"<p><input checked=\"checked\" type=\"checkbox\" name=\"copie\" id=\"copie\" value=\"".$copie."\" title=\"Recevoir une copie de l'email\" tabindex=\"8\" onfocus=\"this.select();\" /> <label for=\"copie\">Recevoir une copie de l'email</label></p>\n";
  • // CHAMPS OBLIGATOIRES
  • echo"<p>* Champs obligatoires</p>\n";
  • // ENVOYER/ANNULER
  • echo"<p><input type=\"submit\" value=\"Envoyer\" title=\"Envoyer\" tabindex=\"9\" /> <input type=\"reset\" value=\"Annuler\" title=\"Annuler\" tabindex=\"10\" /></p>\n";
  • echo"</form>\n";
  • }
  • // VERIFIER
  • function verifier_contact($_POST)
  • {
  • // VERIFICATION DES CHAINES DE CARACTERES
  • function verifier_chaines($chaine)
  • {
  • $mauvaises_chaines = array('content-type:', 'mime-version:', 'content-transfer-encoding:', 'bcc:', 'cc:');
  • foreach($mauvaises_chaines as $caracteres_inautorises)
  • {
  • if(strpos($chaine, $caracteres_inautorises) !== false)
  • {
  • return false;
  • }
  • }
  • return true;
  • }
  • // ON VERIFIE LES CHAMPS
  • // PRENOM ET NOM
  • if(!($_POST['nom']) || $_POST['nom'] == 'Prénom et nom' ||!verifier_chaines($_POST['nom']))
  • {
  • $erreur = '"Prénom et nom"';
  • }
  • // ADRESSE
  • if(!verifier_chaines($_POST['adresse']))
  • {
  • if(($erreur))
  • {
  • $erreur = ''.$erreur.', "Adresse"';
  • }
  • else
  • {
  • $erreur = ''.$erreur.'"Adresse"';
  • }
  • }
  • // LIEU
  • if(!($_POST['lieu']) || $_POST['lieu'] == 'Code postal et lieu' ||!verifier_chaines($_POST['lieu']))
  • {
  • if(($erreur))
  • {
  • $erreur = ''.$erreur.', "Code postal et lieu"';
  • }
  • else
  • {
  • $erreur = ''.$erreur.'"Code postal et lieu"';
  • }
  • }
  • // EMAIL
  • if(!($_POST['email']) || $_POST['email'] == '@' || !preg_match('/^[A-z0-9][\w\.\-]*@[A-z0-9][\w\.\-]+\.[A-z0-9]{2,6}$/', $_POST['email']) ||!verifier_chaines($_POST['email']))
  • {
  • if(($erreur))
  • {
  • $erreur = ''.$erreur.', "Email"';
  • }
  • else
  • {
  • $erreur = ''.$erreur.'"Email"';
  • }
  • }
  • // SUJET
  • if(!($_POST['sujet']) ||!verifier_chaines($_POST['sujet']))
  • {
  • if(($erreur))
  • {
  • $erreur = ''.$erreur.', "Sujet"';
  • }
  • else
  • {
  • $erreur = ''.$erreur.'"Sujet"';
  • }
  • }
  • // TEXTE
  • if(!($_POST['texte']) || $_POST['texte'] == 'Texte' ||!verifier_chaines($_POST['texte']))
  • {
  • if(($erreur))
  • {
  • $erreur = ''.$erreur.', "Texte"';
  • }
  • else
  • {
  • $erreur = ''.$erreur.'"Texte"';
  • }
  • }
  • // SI DES CHOSES NE SONT PAS CORRECTES, ON AFFICHE UN MESSAGE D'ERREUR ET ON RETOURNE "FALSE"
  • if(($erreur))
  • {
  • // POUR UN CHAMP INVALIDE
  • if(!strrpos($erreur, ','))
  • {
  • echo"<p>Le champ ".$erreur." est invalide.</p>\n";
  • }
  • // POUR PLUSIEURS CHAMPS INVALIDES
  • else
  • {
  • // ON REMPLACE LA DERNIERE VIRGULE PAR ET
  • $nouvelle_erreur = substr_replace($erreur, ' et', strrpos($erreur,','), '1');
  • // ON RETOURNE LA NOUVELLE ERREUR
  • echo"<p>Les champs ".$nouvelle_erreur." sont invalides.</p>\n";
  • }
  • // ON RETOURNE L'ERREUR
  • return false;
  • }
  • // ON ENVOIE LE MAIL
  • return true;
  • }
  • // ENVOYER
  • function envoyer_contact($connexion, $_POST)
  • {
  • // CHOIX DU DESTINATAIRE
  • if($_POST['contact'] == 'Webmaster')
  • {
  • $dest = 'webmaster@tonsite.com';
  • }
  • else
  • {
  • // AUTRES DESTINATAIRES VOIRE REQUETES MYSQL POUR SELECTIONNER DES GROUPES ETC.
  • }
  • // ON PREPARE L'ENTETE
  • // AVEC COPIE
  • if(($_POST['copie']))
  • {
  • $entete = "bcc: ".$_POST['email']."\r\n";
  • $entete .= "from: Ton site - ".$_POST['nom']." <".$_POST['email'].">\r\n";
  • }
  • // SANS COPIE
  • elseif(!($_POST['copie']))
  • {
  • $entete = "from: Ton site - ".$_POST['nom']." <".$_POST['email'].">\r\n";
  • }
  • $entete .= "reply-to: ".$_POST['nom']." <".$_POST['email'].">\r\n";
  • $entete .= "return-path: Tonsite - ".$_POST['nom']." <".$_POST['email'].">\r\n";
  • $entete .= "mime-version: 1.0";
  • $entete .= "content-type: text/plain; charset=iso-8859-1";
  • $entete .= "x-mailer: php/" . phpversion();
  • $entete .= "x-sender: Ton site - ".$_POST['nom']." <".$_POST['email'].">";
  • $entete .= "x-auth-smtp-user: localhost";
  • // PUIS LE MESSAGE
  • // NOM ET PRENOM
  • $message = "Prénom et nom : ".$_POST['nom']."\n\n";
  • // SI IL Y A UNE ADRESSE
  • if(($_POST['adresse']) && $_POST['adresse'] != 'Adresse')
  • {
  • $_POST['lieu'] = "".$_POST['adresse'].", ".$_POST['lieu']."";
  • }
  • // LIEU
  • $message .= "Lieu : ".$_POST['lieu']."\n\n";
  • // MESSAGE
  • $message .= "Message : \n\n".$_POST['texte']."";
  • // SI TOUT VA BIEN ON ENVOIE LE MAIL
  • if(mail($dest, $_POST['sujet'], $message, $entete))
  • {
  • // MESSAGE DE CONFIRMATION
  • echo"<p>Ton message a bien été envoyé.</h2>\n";
  • echo"<h3>Infos détaillées</h3>\n";
  • echo"<ul />\n";
  • echo"<li>Contact : ".htmlentities($_POST['contact'])."</li>\n";
  • echo"<li>Prénom et nom : ".htmlentities($_POST['nom'])."</li>\n";
  • echo"<li>Code postal et lieu : ".htmlentities($_POST['lieu'])."</li>\n";
  • echo"<li>Email : ".$_POST['email']."</li>\n";
  • echo"<li>Sujet : ".htmlentities($_POST['sujet'])."</li>\n";
  • // AVEC COPIE
  • if(($_POST['copie']))
  • {
  • echo"<li><span>Copie :</span> Oui</li>\n";
  • }
  • // SANS COPIE
  • elseif(!($_POST['copie']))
  • {
  • echo"<li><span>Copie :</span> Non</li>\n";
  • }
  • echo"</ul>\n";
  • echo"<h3>Message</h3>\n";
  • echo"<p>".nl2br(htmlentities($_POST['texte']))."</p>\n";
  • // RETOUR
  • echo"<p><a href=\"contact.html\" title=\"Retour\">Retour</a></p>\n";
  • }
  • }
  • ?>
<?php
 
// TITRE

echo"<h1>Contact</h1>\n";

// APPEL DES FONCTIONS

// AFFICHER

if(!$_POST)
{
	formulaire_contact($connexion, $_POST);
}

// VERIFIER/ENVOYER

elseif($_POST)
{
	// ON VERIFIE LES CHAMPS

	if(verifier_contact($_POST))
	{
		envoyer_contact($connexion, $_POST);
	}
	else
	{
		formulaire_contact($connexion, $_POST);
	}
}

// FORMULAIRE

function formulaire_contact($connexion, $_POST)
{
	// ON DEFINIT LES VALEURS PAR DEFAUT

	if(!($_POST))
	{
		$nom = 'Prénom et nom';
		$adresse = 'Adresse';
		$lieu = 'Code postal et lieu';
		$email = '@';
		$sujet = 'Sujet';
		$texte = 'Texte';
		$copie = 'on';
	}
	else
	{
		$nom = $_POST['nom'];
		$adresse = $_POST['adresse'];
		$lieu = $_POST['lieu'];
		$email = $_POST['email'];
		$sujet = $_POST['sujet'];
		$texte = $_POST['texte'];
		$texte = $_POST['copie'];
	}

	// FORMULAIRE

	echo"<h2>Formulaire</h2>\n";

	echo"<form action=\"contact.html\" method=\"post\">\n";

	echo"<p><label for=\"contact\">Contact *</label><br />\n";

	//CONTACTS

	echo"<select name=\"contact\" id=\"contact\" title=\"Contact\" tabindex=\"1\">\n";
	echo"<option selected=\"selected\">Webmaster</option>\n";

	// AUTRES DESTINATAIRES VOIRE REQUETES MYSQL POUR SELECTIONNER DES GROUPES ETC.

	echo"</select></p>\n";

	// PRENOM ET NOM

	echo"<p><label for=\"nom\">Prénom et nom *</label><br />\n";
	echo"<input type=\"text\" name=\"nom\" id=\"nom\" value=\"".$nom."\" title=\"Prénom et nom\" tabindex=\"2\" onfocus=\"this.select();\" /></p>\n";

	// ADRESSE

	echo"<p><label for=\"adresse\">Adresse</label><br />\n";
	echo"<input type=\"text\" name=\"adresse\" id=\"adresse\" value=\"".$adresse."\" title=\"Adresse\" tabindex=\"3\" onfocus=\"this.select();\" /></p>\n";

	// CODE POSTAL ET LIEU

	echo"<p><label for=\"lieu\">Code postal et lieu *</label><br />\n";
	echo"<input type=\"text\" name=\"lieu\" id=\"lieu\" value=\"".$lieu."\" title=\"Lieu\" tabindex=\"4\" onfocus=\"this.select();\" /></p>\n";

	// Email

	echo"<p><label for=\"email\">Email *</label><br />\n";
	echo"<input type=\"text\" name=\"email\" id=\"email\" value=\"".$email."\" title=\"Email\" tabindex=\"5\" onfocus=\"this.select();\" /></p>\n";

	// SUJET

	echo"<p><label for=\"sujet\">Sujet *</label><br />\n";
	echo"<input type=\"text\" name=\"sujet\" id=\"sujet\" value=\"".$sujet."\" title=\"Sujet\" tabindex=\"6\" onfocus=\"this.select();\" /></p>\n";

	// TEXTE

	echo"<p><label for=\"texte\">Texte *</label><br />\n";

	echo"<textarea name=\"texte\" id=\"texte\" cols=\"100\" rows=\"5\" title=\"Texte\" tabindex=\"7\" onfocus=\"this.select();\">".$texte."</textarea></p>\n";

	// COPIE

	echo"<p><input checked=\"checked\" type=\"checkbox\" name=\"copie\" id=\"copie\" value=\"".$copie."\" title=\"Recevoir une copie de l'email\" tabindex=\"8\" onfocus=\"this.select();\" /> <label for=\"copie\">Recevoir une copie de l'email</label></p>\n";

	// CHAMPS OBLIGATOIRES

	echo"<p>* Champs obligatoires</p>\n";

	// ENVOYER/ANNULER

	echo"<p><input type=\"submit\" value=\"Envoyer\" title=\"Envoyer\" tabindex=\"9\" /> <input type=\"reset\" value=\"Annuler\" title=\"Annuler\" tabindex=\"10\" /></p>\n";

	echo"</form>\n";
}

// VERIFIER

function verifier_contact($_POST)
{
	// VERIFICATION DES CHAINES DE CARACTERES

	function verifier_chaines($chaine)
	{
		$mauvaises_chaines = array('content-type:', 'mime-version:', 'content-transfer-encoding:', 'bcc:', 'cc:');

		foreach($mauvaises_chaines as $caracteres_inautorises)
		{
			if(strpos($chaine, $caracteres_inautorises) !== false)
			{
				return false;
			}
		}
		return true;
	}

	// ON VERIFIE LES CHAMPS

	// PRENOM ET NOM

	if(!($_POST['nom']) || $_POST['nom'] == 'Prénom et nom' ||!verifier_chaines($_POST['nom']))
	{
		$erreur = '"Prénom et nom"';
	}

	// ADRESSE

	if(!verifier_chaines($_POST['adresse']))
	{
		if(($erreur))
		{
			$erreur = ''.$erreur.', "Adresse"';
		}
		else
		{
			$erreur = ''.$erreur.'"Adresse"';
		}
	}

	// LIEU

	if(!($_POST['lieu']) || $_POST['lieu'] == 'Code postal et lieu' ||!verifier_chaines($_POST['lieu']))
	{
		if(($erreur))
		{
			$erreur = ''.$erreur.', "Code postal et lieu"';
		}
		else
		{
			$erreur = ''.$erreur.'"Code postal et lieu"';
		}
	}

	// EMAIL

	if(!($_POST['email']) || $_POST['email'] == '@' || !preg_match('/^[A-z0-9][\w\.\-]*@[A-z0-9][\w\.\-]+\.[A-z0-9]{2,6}$/', $_POST['email']) ||!verifier_chaines($_POST['email']))
	{
		if(($erreur))
		{
			$erreur = ''.$erreur.', "Email"';
		}
		else
		{
			$erreur = ''.$erreur.'"Email"';
		}
	}

	// SUJET

	if(!($_POST['sujet']) ||!verifier_chaines($_POST['sujet']))
	{
		if(($erreur))
		{
			$erreur = ''.$erreur.', "Sujet"';
		}
		else
		{
			$erreur = ''.$erreur.'"Sujet"';
		}
	}

	// TEXTE

	if(!($_POST['texte']) || $_POST['texte'] == 'Texte' ||!verifier_chaines($_POST['texte']))
	{
		if(($erreur))
		{
			$erreur = ''.$erreur.', "Texte"';
		}
		else
		{
			$erreur = ''.$erreur.'"Texte"';
		}
	}

	// SI DES CHOSES NE SONT PAS CORRECTES, ON AFFICHE UN MESSAGE D'ERREUR ET ON RETOURNE "FALSE"

	if(($erreur))
	{
		// POUR UN CHAMP INVALIDE

		if(!strrpos($erreur, ','))
		{
			echo"<p>Le champ ".$erreur." est invalide.</p>\n";
		}

		// POUR PLUSIEURS CHAMPS INVALIDES

		else
		{
			// ON REMPLACE LA DERNIERE VIRGULE PAR ET

			$nouvelle_erreur = substr_replace($erreur, ' et', strrpos($erreur,','), '1');

			// ON RETOURNE LA NOUVELLE ERREUR

			echo"<p>Les champs ".$nouvelle_erreur." sont invalides.</p>\n";
		}

		// ON RETOURNE L'ERREUR
		
		return false;
	}

	// ON ENVOIE LE MAIL

	return true;
}

// ENVOYER

function envoyer_contact($connexion, $_POST)
{
	// CHOIX DU DESTINATAIRE

	if($_POST['contact'] == 'Webmaster')
	{
		$dest = 'webmaster@tonsite.com';
	}

	else
	{
		// AUTRES DESTINATAIRES VOIRE REQUETES MYSQL POUR SELECTIONNER DES GROUPES ETC.
		
	}

	// ON PREPARE L'ENTETE

	// AVEC COPIE

	if(($_POST['copie']))
	{
		$entete = "bcc: ".$_POST['email']."\r\n";
		$entete .= "from: Ton site - ".$_POST['nom']." <".$_POST['email'].">\r\n";
	}

	// SANS COPIE

	elseif(!($_POST['copie']))
	{
		$entete = "from: Ton site - ".$_POST['nom']." <".$_POST['email'].">\r\n";
	}

	$entete .= "reply-to: ".$_POST['nom']." <".$_POST['email'].">\r\n";
	$entete .= "return-path: Tonsite - ".$_POST['nom']." <".$_POST['email'].">\r\n";
	$entete .= "mime-version: 1.0";
	$entete .= "content-type: text/plain; charset=iso-8859-1";
	$entete .= "x-mailer: php/" . phpversion();
	$entete .= "x-sender: Ton site - ".$_POST['nom']." <".$_POST['email'].">";
	$entete .= "x-auth-smtp-user: localhost";

	// PUIS LE MESSAGE

	// NOM ET PRENOM

	$message = "Prénom et nom : ".$_POST['nom']."\n\n";

	// SI IL Y A UNE ADRESSE

	if(($_POST['adresse']) && $_POST['adresse'] != 'Adresse')
	{
		$_POST['lieu'] = "".$_POST['adresse'].", ".$_POST['lieu']."";
	}

	// LIEU

	$message .= "Lieu : ".$_POST['lieu']."\n\n";

	// MESSAGE

	$message .= "Message : \n\n".$_POST['texte']."";

	// SI TOUT VA BIEN ON ENVOIE LE MAIL

	if(mail($dest, $_POST['sujet'], $message, $entete))
	{
		// MESSAGE DE CONFIRMATION

		echo"<p>Ton message a bien été envoyé.</h2>\n";

		echo"<h3>Infos détaillées</h3>\n";

		echo"<ul />\n";
		echo"<li>Contact : ".htmlentities($_POST['contact'])."</li>\n";
		echo"<li>Prénom et nom : ".htmlentities($_POST['nom'])."</li>\n";
		echo"<li>Code postal et lieu : ".htmlentities($_POST['lieu'])."</li>\n";
		echo"<li>Email : ".$_POST['email']."</li>\n";
		echo"<li>Sujet : ".htmlentities($_POST['sujet'])."</li>\n";

		// AVEC COPIE

		if(($_POST['copie']))
		{
			echo"<li><span>Copie :</span> Oui</li>\n";
		}

		// SANS COPIE

		elseif(!($_POST['copie']))
		{
			echo"<li><span>Copie :</span> Non</li>\n";
		}

		echo"</ul>\n";

		echo"<h3>Message</h3>\n";

		echo"<p>".nl2br(htmlentities($_POST['texte']))."</p>\n";

		// RETOUR

		echo"<p><a href=\"contact.html\" title=\"Retour\">Retour</a></p>\n";
	}
}

?>

Conclusion

Il ne vous reste plus qu'à faire un design et à créer un htacces pour l'url rewriting!!
 

Historique

19 juin 2007 11:09:57 :
Pas vraiment de mise à jour, juste un ajoute de capture d'écran...

Commentaires et avis

signaler à un administrateur
Commentaire de coucou747 le 19/06/2007 11:53:14

function verifier_contact($_POST)
j'ai survolle le code, mettre $_POST comme nom de param, c'est pas une bonne idee, vu que $_POST est une superglobale...

sinon, tu utilises plusieurs echo la ou un seul suffit, et tu devrais mettre des ' a la place des "

if(($_POST['copie'])) => t'as un couple de parentheses qui ne sert a rien, et il manque la fonction isset (ca donne : if (isset($_POST['copie']))  )

idem pour tes autres verifications de variables

signaler à un administrateur
Commentaire de kankrelune le 19/06/2007 12:45:00

Pareil j'ai juste survolé le code mais je vois pas en quoi c'est sécurisé... tu as une faille à l'injection de header... .. .

Sinon quel intérêt de déclarer des fonction dans le corps d'une fonction... .. ?

@ tchaOo°

signaler à un administrateur
Commentaire de le rouge le 19/06/2007 16:32:39

Yop

Et comment faire pour ne pas avoir cette faille à l'injection?
L'interêt d'une fonction dans une autre, ben je l'utilise dans cette dite fonction...

++

signaler à un administrateur
Commentaire de kankrelune le 21/06/2007 18:47:59

contre l'injection... une recherche et tu trouvera tout ce qu'il te faut... en gros tu cherche la présence de caractères CRLF (retour de charriot et retour à la ligne)

"L'interêt d'une fonction dans une autre, ben je l'utilise dans cette dite fonction..."

Oui sauf que tu la redéclare à chaque utilisation de la dite fonction donc externalise la elle ne sera déclarée qu'une fois... .. .

@ tchaOo°

signaler à un administrateur
Commentaire de le rouge le 22/06/2007 09:46:07

Ok, je me renseigne pour l'injection, mais il me semblait que justement c'est déjà sécurisé là-dessus. Si tu avais quelques précisions?

Pour ma fonction dans un autre, elle n'est pas déclaré souvent! Enfin, je crois pas, je regarde et je mets à jour après mes examens de Biologie, donc dès le 9 juillet!

Merci

signaler à un administrateur
Commentaire de ricky03 le 25/06/2007 23:08:50

Pas mal ce code. Mais comment pourrait-on corriger ce problème d'injection? Si tu as une idée Kankrelune, tu pourrais la dire?

Qu'entends-tu par externaliser?

signaler à un administrateur
Commentaire de le rouge le 25/06/2007 23:18:27

Sortir la fonction de vérification des champs (pour les caractères illégaux dans un mail, justement contre l'injection...)

++

signaler à un administrateur
Commentaire de le rouge le 05/07/2007 08:41:43

Hello.

Kankrelune, permets-moi de te demander un petit coup de main sur l'injection afin d'améliorer ma source, je n'ai pas trouvé grand chose sur les retour chariot et autre...

Merci.

signaler à un administrateur
Commentaire de le rouge le 06/07/2007 13:05:54

Up,

Et si pour les entêtes, je remplace comme cela :

// ON PREPARE L'ENTETE

// AVEC COPIE

if(($_POST['copie']))
{
$entete = 'bcc: '.str_replace("\r\n", null, $_GET['email']). "\r\n";
$entete .= 'from: Ton site - '.str_replace("\r\n", null, $_POST['nom']).' <'.str_replace("\r\n", null, $_POST['nom'])>."\r\n";
}

// SANS COPIE

elseif(!($_POST['copie']))
{
$entete = 'from: Ton site - '.str_replace("\r\n", null, $_POST['nom']).' <'.str_replace("\r\n", null, $_POST['nom'])>."\r\n";
}
$entete .= 'reply-to: '.str_replace("\r\n", null, $_POST['nom']).' <'.str_replace("\r\n", null, $_POST['nom'])>."\r\n";
$entete .= 'return-path: Site de Hauterive - '.str_replace("\r\n", null, $_POST['nom']).' <'.str_replace("\r\n", null, $_POST['nom'])>."\r\n";
$entete .= 'mime-version: 1.0'."\r\n";
$entete .= 'content-type: text/html; charset=iso-8859-1'."\r\n";
$entete .= 'x-mailer: php/'.phpversion();.''."\r\n";
$entete .= 'x-sender: Site de Hauterive - '.str_replace("\r\n", null, $_POST['nom']).' <'.str_replace("\r\n", null, $_POST['nom'])>."\r\n";
$entete .= 'x-auth-smtp-user: localhost'."\r\n";

++

signaler à un administrateur
Commentaire de le rouge le 06/07/2007 13:06:55

Up,

Et si pour les entêtes, je remplace comme cela :

// ON PREPARE L'ENTETE

// AVEC COPIE

if(($_POST['copie']))
{
$entete = 'bcc: '.str_replace("\r\n", null, $_GET['email']). "\r\n";
$entete .= 'from: Ton site - '.str_replace("\r\n", null, $_POST['nom']).' <'.str_replace("\r\n", null, $_POST['nom'])>."\r\n";
}

// SANS COPIE

elseif(!($_POST['copie']))
{
$entete = 'from: Ton site - '.str_replace("\r\n", null, $_POST['nom']).' <'.str_replace("\r\n", null, $_POST['nom'])>."\r\n";
}
$entete .= 'reply-to: '.str_replace("\r\n", null, $_POST['nom']).' <'.str_replace("\r\n", null, $_POST['nom'])>."\r\n";
$entete .= 'return-path: Site de Hauterive - '.str_replace("\r\n", null, $_POST['nom']).' <'.str_replace("\r\n", null, $_POST['nom'])>."\r\n";
$entete .= 'mime-version: 1.0'."\r\n";
$entete .= 'content-type: text/html; charset=iso-8859-1'."\r\n";
$entete .= 'x-mailer: php/'.phpversion();.''."\r\n";
$entete .= 'x-sender: Site de Hauterive - '.str_replace("\r\n", null, $_POST['nom']).' <'.str_replace("\r\n", null, $_POST['nom'])>."\r\n";
$entete .= 'x-auth-smtp-user: localhost'."\r\n";

++

signaler à un administrateur
Commentaire de le rouge le 06/07/2007 13:33:50

Up,

Et si pour les entêtes, je remplace comme cela :

// ON PREPARE L'ENTETE

// AVEC COPIE

if(($_POST['copie']))
{
$entete = 'bcc: '.str_replace("\r\n", null, $_GET['email']). "\r\n";
$entete .= 'from: Ton site - '.str_replace("\r\n", null, $_POST['nom']).' <'.str_replace("\r\n", null, $_POST['nom'])>."\r\n";
}

// SANS COPIE

elseif(!($_POST['copie']))
{
$entete = 'from: Ton site - '.str_replace("\r\n", null, $_POST['nom']).' <'.str_replace("\r\n", null, $_POST['nom'])>."\r\n";
}
$entete .= 'reply-to: '.str_replace("\r\n", null, $_POST['nom']).' <'.str_replace("\r\n", null, $_POST['nom'])>."\r\n";
$entete .= 'return-path: Site de Hauterive - '.str_replace("\r\n", null, $_POST['nom']).' <'.str_replace("\r\n", null, $_POST['nom'])>."\r\n";
$entete .= 'mime-version: 1.0'."\r\n";
$entete .= 'content-type: text/html; charset=iso-8859-1'."\r\n";
$entete .= 'x-mailer: php/'.phpversion();.''."\r\n";
$entete .= 'x-sender: Site de Hauterive - '.str_replace("\r\n", null, $_POST['nom']).' <'.str_replace("\r\n", null, $_POST['nom'])>."\r\n";
$entete .= 'x-auth-smtp-user: localhost'."\r\n";

++

signaler à un administrateur
Commentaire de le rouge le 06/07/2007 13:34:35

Oups, si un admin/modérateur pouvait supprimer deux des 3 derniers commentaires identiques, merci...

(ce message aussi d'ailleurs...)

signaler à un administrateur
Commentaire de le rouge le 19/07/2007 14:22:02

Alors? C'est mieux?

S'il vous plaît, c'est tellement important...

Merci, ++

signaler à un administrateur
Commentaire de kankrelune le 24/07/2007 16:14:45

Désolé de ne pas avoir répondu avant mais j'avais zappé... .. .

Donc pour répondre à ton dernier poste... non pas vraiment... l'idée n'est pas d'enlever les caractères interdit, car ça risque de mettre le bordel dans tes header plus qu'autre chose, mais plutôt de détecter leur présence et si tu en trouve un tu affiche une erreur genre "caractère(s) interdit détecté(s)"... .. .

if(strpos( $maVar, "\n") !== false || strpos( $maVar, "\r") !== false)
    // erreur
else
{
    // traitement
}

@ tchaOo°

signaler à un administrateur
Commentaire de le rouge le 01/08/2007 14:14:05

Yop, merci pour ta réponse, donc il me suffit de modifier ma fonction de verification de chaîne comme suit :

// VERIFICATION DES CHAINES DE CARACTERES

function verifier_chaines($chaine)
{
$mauvaises_chaines = array('content-type:', 'mime-version:', 'content-transfer-encoding:', 'bcc:', 'cc:', '\n', '\r');

foreach($mauvaises_chaines as $caracteres_inautorises)
{
if(strpos($chaine, $caracteres_inautorises) !== false)
{
return false;
}
}
return true;
}

++

signaler à un administrateur
Commentaire de kankrelune le 01/08/2007 14:22:32

Euh non pas forcément... pas besoin de vérifier la présence de header puisque s'il n'y a pas retour à la ligne ces derniers ne serviront à rien... .. .

function verifier_chaines($str)
{
    return (strpos($str, "\n") === false &&
            strpos($str, "\r") === false);
}

Par contre cette vérification ne doit pas être faite sur le corps du mail qui lui peut contenir des retour à la ligne... .. .

@ tchaOo°

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

envoi multiple de mail [ par GADSN ] bonjourj'ai une petite question : je suis entrtain d'envoyer des mails periodiquement pour les adherants de mon site ; le probleme c'est que quelques formulaire/email sans client messagerie [ par totti3201 ] Bonjour à tous, je suis nouveau dans la programmation PHP et sur cet excellent site. J'ai une question dont je recherche en vain la réponse depuis p Vérifier le présente d'une adresse email spécifique dans la boîte de messagerie [ par bonheur123 ] Bonjour,.Pouvez vous m'aider à avoir un script en PHP qui vérifie la présence d'une adresse email spécifique dans une boite de messagerie donnée ?.En Explication de ce code PHP [ par bonheur123 ] Bonjour,voici ce code je voudrais que vous m'aidiez à le comprendre.Comment marche un code PHP ( de haut en bas ou de bas en haut ?)Ce cade fonctionne Rajouté des fichiers joints avec l'envoi d'un Email. [ par dypsis66 ] Bonjour à tous! Je suis une novice en php et je suis en train de créer pour une entreprise un site internet. J'ai creer un formulaire de contact ou le Formulaire [ par kanye1982 ] YoussBonjour tout le monde voila ma questionJe suis en train de faire un formulaire d'inscription en PHP ;) et j'aimerais avoir un petit coup de main, Test d'un champ dans un formulaire [ par kanye1982 ] YoussVoila ma question elle ne devrait pas être trop compliqué j'ai un formulaire en php et dans celui-ci le champ "raison" qui est un champ à choix m envoi d'un email [ par dalitch ] bonjour, je veux envouer un email qui contient le contenu d'une table. Le pb c'est que je recoit le mail mais il est vide. Comment je peux récupérer l


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.