<?php
$email1='serge.nazarian@fai1.fr';
echo "ceci ne marche pas <$email1>\r\n";
echo "ceci marche < $email1 >\r\n";
$email2="serge.nazarian@fai2.fr";
echo "ceci ne marche pas <$email2>\r\n";
echo "ceci marche < $email2 >\r\n";
?>
Qui peut m'expliquer pourquoi ce programme renvoie :
ceci ne marche pas
ceci marche < serge.nazarian@fai1.fr >
ceci ne marche pas
ceci marche < serge.nazarian@fai2.fr >
autrement dit pourquoi < perturbe la chaîne de caractères s'il n'est
pas suivi d'une espace.
Moi, je cherche à afficher <serge.nazarian@fai.fr> sans espace.
Quelqu'un aurait-il une solution ?
Merci pour toute aide.
Cordialement,
--
Serge Nazarian
Pour m'écrire directement : http://cerbermail.com/?ZDkROVSJlu
[...] je cherche à envoyer un courriel (un mail en franglais) dans un script PHP et que j'ai du mal avec le champ headers (dont je veux bien qu'on m'explique toutes les subtilités ici ou ailleurs).
Ok, je redirige vers fr.comp.lang.php. Je suppose que tu utilises cette fonction d'envoi de courriel en PHP : <http://php.net/manual/fr/function.mail.php>. Quels problèmes as-tu exactement ?
Bonjour, Je ne sais pas si ce que je mets dans $header est correct : $header .= "From :".$nom." <".$email."> /r/n" car l'affichage avec echo n'est pas bon, mais peut-être que l'envoi avec $mail de PHP est bon quand même, d'après ce que je lis dans <http://php.net/manual/fr/function.mail.php>. Cordialement. -- Serge Nazarian Pour m'écrire directement : http://cerbermail.com/?ZDkROVSJlu
Olivier Miakinen a écrit le 23/09/2016 :
Le 23/09/2016 08:54, Serge Nazarian a écrit :
[...] je cherche à envoyer un courriel (un mail en
franglais) dans un script PHP et que j'ai du mal avec le champ headers
(dont je veux bien qu'on m'explique toutes les subtilités ici ou
ailleurs).
Ok, je redirige vers fr.comp.lang.php.
Je suppose que tu utilises cette fonction d'envoi de courriel en PHP :
<http://php.net/manual/fr/function.mail.php>. Quels problèmes as-tu
exactement ?
Bonjour,
Je ne sais pas si ce que je mets dans $header est correct :
$header .= "From :".$nom." <".$email."> /r/n"
car l'affichage avec echo n'est pas bon, mais peut-être que l'envoi
avec $mail de PHP est bon quand même, d'après ce que je lis dans
<http://php.net/manual/fr/function.mail.php>.
Cordialement.
--
Serge Nazarian
Pour m'écrire directement : http://cerbermail.com/?ZDkROVSJlu
[...] je cherche à envoyer un courriel (un mail en franglais) dans un script PHP et que j'ai du mal avec le champ headers (dont je veux bien qu'on m'explique toutes les subtilités ici ou ailleurs).
Ok, je redirige vers fr.comp.lang.php. Je suppose que tu utilises cette fonction d'envoi de courriel en PHP : <http://php.net/manual/fr/function.mail.php>. Quels problèmes as-tu exactement ?
Bonjour, Je ne sais pas si ce que je mets dans $header est correct : $header .= "From :".$nom." <".$email."> /r/n" car l'affichage avec echo n'est pas bon, mais peut-être que l'envoi avec $mail de PHP est bon quand même, d'après ce que je lis dans <http://php.net/manual/fr/function.mail.php>. Cordialement. -- Serge Nazarian Pour m'écrire directement : http://cerbermail.com/?ZDkROVSJlu
Olivier Miakinen
Le 26/09/2016 11:03, Serge Nazarian a écrit :
Je suppose que tu utilises cette fonction d'envoi de courriel en PHP : <http://php.net/manual/fr/function.mail.php>. Quels problèmes as-tu exactement ?
Bonjour, Je ne sais pas si ce que je mets dans $header est correct :
Non, ça ne l'est pas en effet. Je ne suis pas sûr de voir toutes les erreurs car je ne connais pas le contenu de $header, $nom et $email avant l'appel, mais il y a des erreurs évidentes rien que dans ce que tu montres.
$header .
Puisque tu ajoutes quelque chose à un $header existant, il faudrait déjà savoir ce qu'il y a dedans *avant*.
"From :"
Mettre l'espace après les deux-points et pas avant : "From: "
.$nom." <".$email.
Il faudrait que $nom et $email soient syntaxiquement corrects, mais je ne peux pas en juger comme ça. J'espère qu'ils ne viennent pas directement d'une requête faite à l'utilisateur, sans contrôle, car sinon ton script peut être utilisé pour spammer la terre entière. Je ne plaisante pas.
"> /r/n"
Ça c'est la plus grosse erreur : rn et pas /r/n. Note que l'espace avant n'est pas utile et pourrait être supprimée.
car l'affichage avec echo n'est pas bon, mais peut-être que l'envoi avec $mail de PHP est bon quand même, d'après ce que je lis dans <http://php.net/manual/fr/function.mail.php>.
:-D Habituellement, on lit dans les forums d'entraide « ce que j'envoie semble correct mais ça ne fonctionne pas ». Il est plus inhabituel de lire « ce que j'envoie est incorrect mais ça devrait fonctionner quand même »... -- Olivier Miakinen
Le 26/09/2016 11:03, Serge Nazarian a écrit :
Je suppose que tu utilises cette fonction d'envoi de courriel en PHP :
<http://php.net/manual/fr/function.mail.php>. Quels problèmes as-tu
exactement ?
Bonjour,
Je ne sais pas si ce que je mets dans $header est correct :
Non, ça ne l'est pas en effet. Je ne suis pas sûr de voir toutes les
erreurs car je ne connais pas le contenu de $header, $nom et $email
avant l'appel, mais il y a des erreurs évidentes rien que dans ce
que tu montres.
$header .
Puisque tu ajoutes quelque chose à un $header existant, il faudrait
déjà savoir ce qu'il y a dedans *avant*.
"From :"
Mettre l'espace après les deux-points et pas avant :
"From: "
.$nom." <".$email.
Il faudrait que $nom et $email soient syntaxiquement corrects, mais
je ne peux pas en juger comme ça. J'espère qu'ils ne viennent pas
directement d'une requête faite à l'utilisateur, sans contrôle, car
sinon ton script peut être utilisé pour spammer la terre entière.
Je ne plaisante pas.
"> /r/n"
Ça c'est la plus grosse erreur : rn et pas /r/n. Note que
l'espace avant n'est pas utile et pourrait être supprimée.
car l'affichage avec echo n'est pas bon, mais peut-être que l'envoi
avec $mail de PHP est bon quand même, d'après ce que je lis dans
<http://php.net/manual/fr/function.mail.php>.
:-D
Habituellement, on lit dans les forums d'entraide « ce que j'envoie
semble correct mais ça ne fonctionne pas ». Il est plus inhabituel
de lire « ce que j'envoie est incorrect mais ça devrait fonctionner
quand même »...
Je suppose que tu utilises cette fonction d'envoi de courriel en PHP : <http://php.net/manual/fr/function.mail.php>. Quels problèmes as-tu exactement ?
Bonjour, Je ne sais pas si ce que je mets dans $header est correct :
Non, ça ne l'est pas en effet. Je ne suis pas sûr de voir toutes les erreurs car je ne connais pas le contenu de $header, $nom et $email avant l'appel, mais il y a des erreurs évidentes rien que dans ce que tu montres.
$header .
Puisque tu ajoutes quelque chose à un $header existant, il faudrait déjà savoir ce qu'il y a dedans *avant*.
"From :"
Mettre l'espace après les deux-points et pas avant : "From: "
.$nom." <".$email.
Il faudrait que $nom et $email soient syntaxiquement corrects, mais je ne peux pas en juger comme ça. J'espère qu'ils ne viennent pas directement d'une requête faite à l'utilisateur, sans contrôle, car sinon ton script peut être utilisé pour spammer la terre entière. Je ne plaisante pas.
"> /r/n"
Ça c'est la plus grosse erreur : rn et pas /r/n. Note que l'espace avant n'est pas utile et pourrait être supprimée.
car l'affichage avec echo n'est pas bon, mais peut-être que l'envoi avec $mail de PHP est bon quand même, d'après ce que je lis dans <http://php.net/manual/fr/function.mail.php>.
:-D Habituellement, on lit dans les forums d'entraide « ce que j'envoie semble correct mais ça ne fonctionne pas ». Il est plus inhabituel de lire « ce que j'envoie est incorrect mais ça devrait fonctionner quand même »... -- Olivier Miakinen
Je ne sais pas si ce que je mets dans $header est correct : "> /r/n"
Ça c'est la plus grosse erreur : rn et pas /r/n. Note que l'espace avant n'est pas utile et pourrait être supprimée.
Dans de nombreux cas (systèmes Unix en particulier), le "r" est inutile voire nocif car risquant d'insérer des lignes vides, "n" suffit.
Habituellement, on lit dans les forums d'entraide « ce que j'envoie semble correct mais ça ne fonctionne pas ». Il est plus inhabituel de lire « ce que j'envoie est incorrect mais ça devrait fonctionner quand même »...
La syntaxe est correcte, mais pour envoyer un courrier, pas pour l'affichage dans une page HTML via echo ou print. Voici un exemple qui fonctionne, servant à l'envoi d'un courrier de confirmation suite au remplissage d'un formulaire en ligne, mais c'est généralisable à tout envoi en texte brut : // En-têtes du mail // Expéditeur $entete = "From: Expediteur n"; // Copie caché au gestionnaire du formulaire $entete .= "Bcc: "; // Précisions concernant le format d'envoi $entete .= "MIME-Version: 1.0n"; $entete .= "Content-type: text/plain; charset=UTF-8n"; $entete .= "Content-Transfer-Encoding: quoted-printablen"; // Destinataire $destinataire = ""; // Sujet $sujet = "Compte-rendu des informations de votre formulaire" // Corps du message $message = "Bla bla bla"; // Envoi $mail_ok = mail($destinataire, $subject, $message, $entete);
Le 26/09/2016 11:03, Serge Nazarian a écrit :
> Je ne sais pas si ce que je mets dans $header est correct :
> "> /r/n"
Ça c'est la plus grosse erreur : rn et pas /r/n. Note que
l'espace avant n'est pas utile et pourrait être supprimée.
Dans de nombreux cas (systèmes Unix en particulier), le "r" est inutile
voire nocif car risquant d'insérer des lignes vides, "n" suffit.
Habituellement, on lit dans les forums d'entraide « ce que j'envoie
semble correct mais ça ne fonctionne pas ». Il est plus inhabituel
de lire « ce que j'envoie est incorrect mais ça devrait fonctionner
quand même »...
La syntaxe est correcte, mais pour envoyer un courrier, pas pour
l'affichage dans une page HTML via echo ou print.
Voici un exemple qui fonctionne, servant à l'envoi d'un courrier de
confirmation suite au remplissage d'un formulaire en ligne, mais c'est
généralisable à tout envoi en texte brut :
// En-têtes du mail
// Expéditeur
$entete = "From: Expediteur <expediteur@domaine.tld>n";
// Copie caché au gestionnaire du formulaire
$entete .= "Bcc: gestionnaire@domaine2.tldn";
// Précisions concernant le format d'envoi
$entete .= "MIME-Version: 1.0n";
$entete .= "Content-type: text/plain; charset=UTF-8n";
$entete .= "Content-Transfer-Encoding: quoted-printablen";
Je ne sais pas si ce que je mets dans $header est correct : "> /r/n"
Ça c'est la plus grosse erreur : rn et pas /r/n. Note que l'espace avant n'est pas utile et pourrait être supprimée.
Dans de nombreux cas (systèmes Unix en particulier), le "r" est inutile voire nocif car risquant d'insérer des lignes vides, "n" suffit.
Habituellement, on lit dans les forums d'entraide « ce que j'envoie semble correct mais ça ne fonctionne pas ». Il est plus inhabituel de lire « ce que j'envoie est incorrect mais ça devrait fonctionner quand même »...
La syntaxe est correcte, mais pour envoyer un courrier, pas pour l'affichage dans une page HTML via echo ou print. Voici un exemple qui fonctionne, servant à l'envoi d'un courrier de confirmation suite au remplissage d'un formulaire en ligne, mais c'est généralisable à tout envoi en texte brut : // En-têtes du mail // Expéditeur $entete = "From: Expediteur n"; // Copie caché au gestionnaire du formulaire $entete .= "Bcc: "; // Précisions concernant le format d'envoi $entete .= "MIME-Version: 1.0n"; $entete .= "Content-type: text/plain; charset=UTF-8n"; $entete .= "Content-Transfer-Encoding: quoted-printablen"; // Destinataire $destinataire = ""; // Sujet $sujet = "Compte-rendu des informations de votre formulaire" // Corps du message $message = "Bla bla bla"; // Envoi $mail_ok = mail($destinataire, $subject, $message, $entete);
Je ne sais pas si ce que je mets dans $header est correct : "> /r/n"
Ça c'est la plus grosse erreur : rn et pas /r/n. Note que l'espace avant n'est pas utile et pourrait être supprimée.
Dans de nombreux cas (systèmes Unix en particulier), le "r" est inutile voire nocif car risquant d'insérer des lignes vides, "n" suffit.
Habituellement, on lit dans les forums d'entraide « ce que j'envoie semble correct mais ça ne fonctionne pas ». Il est plus inhabituel de lire « ce que j'envoie est incorrect mais ça devrait fonctionner quand même »...
La syntaxe est correcte, mais pour envoyer un courrier, pas pour l'affichage dans une page HTML via echo ou print. Voici un exemple qui fonctionne, servant à l'envoi d'un courrier de confirmation suite au remplissage d'un formulaire en ligne, mais c'est généralisable à tout envoi en texte brut : // En-têtes du mail // Expéditeur $entete = "From: Expediteur n"; // Copie caché au gestionnaire du formulaire $entete .= "Bcc: "; // Précisions concernant le format d'envoi $entete .= "MIME-Version: 1.0n"; $entete .= "Content-type: text/plain; charset=UTF-8n"; $entete .= "Content-Transfer-Encoding: quoted-printablen"; // Destinataire $destinataire = ""; // Sujet $sujet = "Compte-rendu des informations de votre formulaire" // Corps du message $message = "Bla bla bla"; // Envoi $mail_ok = mail($destinataire, $subject, $message, $entete);
Merci. Mais $entete = "From: Expediteur n"; doit utiliser des variables postées dans un formulaire, $nom pour Expediteur et $email pour Est-ce que $entete = "From: ".$nom." <".$email.">n"; est correct ? -- Serge Nazarian Pour m'écrire directement : http://cerbermail.com/?ZDkROVSJlu
Je ne sais pas si ce que je mets dans $header est correct :
"> /r/n"
Ça c'est la plus grosse erreur : rn et pas /r/n. Note que
l'espace avant n'est pas utile et pourrait être supprimée.
Dans de nombreux cas (systèmes Unix en particulier), le "r" est inutile
voire nocif car risquant d'insérer des lignes vides, "n" suffit.
Habituellement, on lit dans les forums d'entraide « ce que j'envoie
semble correct mais ça ne fonctionne pas ». Il est plus inhabituel
de lire « ce que j'envoie est incorrect mais ça devrait fonctionner
quand même »...
La syntaxe est correcte, mais pour envoyer un courrier, pas pour
l'affichage dans une page HTML via echo ou print.
Voici un exemple qui fonctionne, servant à l'envoi d'un courrier de
confirmation suite au remplissage d'un formulaire en ligne, mais c'est
généralisable à tout envoi en texte brut :
// En-têtes du mail
// Expéditeur
$entete = "From: Expediteur <expediteur@domaine.tld>n";
// Copie caché au gestionnaire du formulaire
$entete .= "Bcc: gestionnaire@domaine2.tldn";
// Précisions concernant le format d'envoi
$entete .= "MIME-Version: 1.0n";
$entete .= "Content-type: text/plain; charset=UTF-8n";
$entete .= "Content-Transfer-Encoding: quoted-printablen";
Merci.
Mais $entete = "From: Expediteur <expediteur@domaine.tld>n";
doit utiliser des variables postées dans un formulaire, $nom pour
Expediteur et $email pour expediteur@domaine.tld.
Est-ce que $entete = "From: ".$nom." <".$email.">n"; est correct ?
--
Serge Nazarian
Pour m'écrire directement : http://cerbermail.com/?ZDkROVSJlu
Je ne sais pas si ce que je mets dans $header est correct : "> /r/n"
Ça c'est la plus grosse erreur : rn et pas /r/n. Note que l'espace avant n'est pas utile et pourrait être supprimée.
Dans de nombreux cas (systèmes Unix en particulier), le "r" est inutile voire nocif car risquant d'insérer des lignes vides, "n" suffit.
Habituellement, on lit dans les forums d'entraide « ce que j'envoie semble correct mais ça ne fonctionne pas ». Il est plus inhabituel de lire « ce que j'envoie est incorrect mais ça devrait fonctionner quand même »...
La syntaxe est correcte, mais pour envoyer un courrier, pas pour l'affichage dans une page HTML via echo ou print. Voici un exemple qui fonctionne, servant à l'envoi d'un courrier de confirmation suite au remplissage d'un formulaire en ligne, mais c'est généralisable à tout envoi en texte brut : // En-têtes du mail // Expéditeur $entete = "From: Expediteur n"; // Copie caché au gestionnaire du formulaire $entete .= "Bcc: "; // Précisions concernant le format d'envoi $entete .= "MIME-Version: 1.0n"; $entete .= "Content-type: text/plain; charset=UTF-8n"; $entete .= "Content-Transfer-Encoding: quoted-printablen"; // Destinataire $destinataire = ""; // Sujet $sujet = "Compte-rendu des informations de votre formulaire" // Corps du message $message = "Bla bla bla"; // Envoi $mail_ok = mail($destinataire, $subject, $message, $entete);
Merci. Mais $entete = "From: Expediteur n"; doit utiliser des variables postées dans un formulaire, $nom pour Expediteur et $email pour Est-ce que $entete = "From: ".$nom." <".$email.">n"; est correct ? -- Serge Nazarian Pour m'écrire directement : http://cerbermail.com/?ZDkROVSJlu
Serge Nazarian
Olivier Miakinen a écrit le 26/09/2016 :
Il faudrait que $nom et $email soient syntaxiquement corrects, mais je ne peux pas en juger comme ça. J'espère qu'ils ne viennent pas directement d'une requête faite à l'utilisateur, sans contrôle, car sinon ton script peut être utilisé pour spammer la terre entière. Je ne plaisante pas.
Peux-tu m'en dire un peu plus sur le risque de « spammer la terre entière » car effectivement $nom et $email proviennent d'un formulaire rempli par l'utilisateur. -- Serge Nazarian Pour m'écrire directement : http://cerbermail.com/?ZDkROVSJlu
Olivier Miakinen a écrit le 26/09/2016 :
Il faudrait que $nom et $email soient syntaxiquement corrects, mais
je ne peux pas en juger comme ça. J'espère qu'ils ne viennent pas
directement d'une requête faite à l'utilisateur, sans contrôle, car
sinon ton script peut être utilisé pour spammer la terre entière.
Je ne plaisante pas.
Peux-tu m'en dire un peu plus sur le risque de « spammer la terre
entière » car effectivement $nom et $email proviennent d'un formulaire
rempli par l'utilisateur.
--
Serge Nazarian
Pour m'écrire directement : http://cerbermail.com/?ZDkROVSJlu
Il faudrait que $nom et $email soient syntaxiquement corrects, mais je ne peux pas en juger comme ça. J'espère qu'ils ne viennent pas directement d'une requête faite à l'utilisateur, sans contrôle, car sinon ton script peut être utilisé pour spammer la terre entière. Je ne plaisante pas.
Peux-tu m'en dire un peu plus sur le risque de « spammer la terre entière » car effectivement $nom et $email proviennent d'un formulaire rempli par l'utilisateur. -- Serge Nazarian Pour m'écrire directement : http://cerbermail.com/?ZDkROVSJlu
Olivier Miakinen
Le 27/09/2016 09:13, Serge Nazarian a écrit :
Mais $entete = "From: Expediteur n"; doit utiliser des variables postées dans un formulaire, $nom pour Expediteur et $email pour
Hum. Je vais répondre à ton autre message à ce propos.
Est-ce que $entete = "From: ".$nom." <".$email.">n"; est correct ?
Oui, ou plus simplement : $entete = "From: $nom <$email>n"; -- Olivier Miakinen
Le 27/09/2016 09:13, Serge Nazarian a écrit :
Mais $entete = "From: Expediteur <expediteur@domaine.tld>n";
doit utiliser des variables postées dans un formulaire, $nom pour
Expediteur et $email pour expediteur@domaine.tld.
Hum. Je vais répondre à ton autre message à ce propos.
Est-ce que $entete = "From: ".$nom." <".$email.">n"; est correct ?
Oui, ou plus simplement : $entete = "From: $nom <$email>n";
Mais $entete = "From: Expediteur n"; doit utiliser des variables postées dans un formulaire, $nom pour Expediteur et $email pour
Hum. Je vais répondre à ton autre message à ce propos.
Est-ce que $entete = "From: ".$nom." <".$email.">n"; est correct ?
Oui, ou plus simplement : $entete = "From: $nom <$email>n"; -- Olivier Miakinen
Olivier Miakinen
Le 27/09/2016 09:18, Serge Nazarian m'a répondu :
Il faudrait que $nom et $email soient syntaxiquement corrects, mais je ne peux pas en juger comme ça. J'espère qu'ils ne viennent pas directement d'une requête faite à l'utilisateur, sans contrôle, car sinon ton script peut être utilisé pour spammer la terre entière. Je ne plaisante pas.
Peux-tu m'en dire un peu plus sur le risque de « spammer la terre entière » car effectivement $nom et $email proviennent d'un formulaire rempli par l'utilisateur.
Très volontiers. Dans un courriel, ce qui sépare les entêtes du contenu du message, c'est juste deux sauts de ligne de suite. Avoir un contrôle sur une partie du contenu d'un entête suffit alors pour ajouter d'une part de nombreux autres entêtes, d'autre part le corps du message lui-même. Pour cela, il suffit que le paramètre $nom ou $email contienne par exemple : "n Subject: achetez mon beau produitn To: <adresse_spammée_1>n To: <adresse_spammée_2>n ... To: <adresse_spammée_3000>n n J'ai un superbe produit à vendre, achetez-le.n Allez sur <site_de_spam>.n ... ...n" Le spammeur peut faire mieux, d'abord en complétant le champ From au lieu de l'interrompre brutalement, et aussi en envoyant son spam en MIME Multipart, ce qui relègue le *vrai* contenu de ton message dans une zone cachée (il ne reste donc plus que le spam et rien d'autre). Heureusement, on peut s'en protéger. La solution /a minima/ consiste à vérifier que les champs $nom et $email ne contiennent aucun saut de ligne. Tu peux aller plus loin, en vérifiant d'abord que l'adresse de courriel est syntaxiquement correcte : <http://faqfclphp.free.fr/#rub5.3>. Pour bien faire, il faudrait aussi encoder le nom selon MIME (RFC 2047) si jamais il contient des caractères non ASCII, mais je parierais bien que la classe PHPMailer indiquée par Jean-François sait le faire. -- Olivier Miakinen
Le 27/09/2016 09:18, Serge Nazarian m'a répondu :
Il faudrait que $nom et $email soient syntaxiquement corrects, mais
je ne peux pas en juger comme ça. J'espère qu'ils ne viennent pas
directement d'une requête faite à l'utilisateur, sans contrôle, car
sinon ton script peut être utilisé pour spammer la terre entière.
Je ne plaisante pas.
Peux-tu m'en dire un peu plus sur le risque de « spammer la terre
entière » car effectivement $nom et $email proviennent d'un formulaire
rempli par l'utilisateur.
Très volontiers.
Dans un courriel, ce qui sépare les entêtes du contenu du message,
c'est juste deux sauts de ligne de suite. Avoir un contrôle sur une
partie du contenu d'un entête suffit alors pour ajouter d'une part
de nombreux autres entêtes, d'autre part le corps du message lui-même.
Pour cela, il suffit que le paramètre $nom ou $email contienne par
exemple :
"n
Subject: achetez mon beau produitn
To: <adresse_spammée_1>n
To: <adresse_spammée_2>n
...
To: <adresse_spammée_3000>n
n
J'ai un superbe produit à vendre, achetez-le.n
Allez sur <site_de_spam>.n
...
...n"
Le spammeur peut faire mieux, d'abord en complétant le champ From
au lieu de l'interrompre brutalement, et aussi en envoyant son
spam en MIME Multipart, ce qui relègue le *vrai* contenu de ton
message dans une zone cachée (il ne reste donc plus que le spam
et rien d'autre).
Heureusement, on peut s'en protéger. La solution /a minima/ consiste
à vérifier que les champs $nom et $email ne contiennent aucun saut
de ligne.
Tu peux aller plus loin, en vérifiant d'abord que l'adresse de courriel
est syntaxiquement correcte : <http://faqfclphp.free.fr/#rub5.3>. Pour
bien faire, il faudrait aussi encoder le nom selon MIME (RFC 2047) si
jamais il contient des caractères non ASCII, mais je parierais bien
que la classe PHPMailer indiquée par Jean-François sait le faire.
Il faudrait que $nom et $email soient syntaxiquement corrects, mais je ne peux pas en juger comme ça. J'espère qu'ils ne viennent pas directement d'une requête faite à l'utilisateur, sans contrôle, car sinon ton script peut être utilisé pour spammer la terre entière. Je ne plaisante pas.
Peux-tu m'en dire un peu plus sur le risque de « spammer la terre entière » car effectivement $nom et $email proviennent d'un formulaire rempli par l'utilisateur.
Très volontiers. Dans un courriel, ce qui sépare les entêtes du contenu du message, c'est juste deux sauts de ligne de suite. Avoir un contrôle sur une partie du contenu d'un entête suffit alors pour ajouter d'une part de nombreux autres entêtes, d'autre part le corps du message lui-même. Pour cela, il suffit que le paramètre $nom ou $email contienne par exemple : "n Subject: achetez mon beau produitn To: <adresse_spammée_1>n To: <adresse_spammée_2>n ... To: <adresse_spammée_3000>n n J'ai un superbe produit à vendre, achetez-le.n Allez sur <site_de_spam>.n ... ...n" Le spammeur peut faire mieux, d'abord en complétant le champ From au lieu de l'interrompre brutalement, et aussi en envoyant son spam en MIME Multipart, ce qui relègue le *vrai* contenu de ton message dans une zone cachée (il ne reste donc plus que le spam et rien d'autre). Heureusement, on peut s'en protéger. La solution /a minima/ consiste à vérifier que les champs $nom et $email ne contiennent aucun saut de ligne. Tu peux aller plus loin, en vérifiant d'abord que l'adresse de courriel est syntaxiquement correcte : <http://faqfclphp.free.fr/#rub5.3>. Pour bien faire, il faudrait aussi encoder le nom selon MIME (RFC 2047) si jamais il contient des caractères non ASCII, mais je parierais bien que la classe PHPMailer indiquée par Jean-François sait le faire. -- Olivier Miakinen
Serge Nazarian
Olivier Miakinen a écrit le 27/09/2016 :
Le 27/09/2016 09:18, Serge Nazarian m'a répondu :
Il faudrait que $nom et $email soient syntaxiquement corrects, mais je ne peux pas en juger comme ça. J'espère qu'ils ne viennent pas directement d'une requête faite à l'utilisateur, sans contrôle, car sinon ton script peut être utilisé pour spammer la terre entière. Je ne plaisante pas.
Peux-tu m'en dire un peu plus sur le risque de « spammer la terre entière » car effectivement $nom et $email proviennent d'un formulaire rempli par l'utilisateur.
Très volontiers. Dans un courriel, ce qui sépare les entêtes du contenu du message, c'est juste deux sauts de ligne de suite. Avoir un contrôle sur une partie du contenu d'un entête suffit alors pour ajouter d'une part de nombreux autres entêtes, d'autre part le corps du message lui-même. Pour cela, il suffit que le paramètre $nom ou $email contienne par exemple : "n Subject: achetez mon beau produitn To: <adresse_spammée_1>n To: <adresse_spammée_2>n ... To: <adresse_spammée_3000>n n J'ai un superbe produit à vendre, achetez-le.n Allez sur <site_de_spam>.n ... ...n" Le spammeur peut faire mieux, d'abord en complétant le champ From au lieu de l'interrompre brutalement, et aussi en envoyant son spam en MIME Multipart, ce qui relègue le *vrai* contenu de ton message dans une zone cachée (il ne reste donc plus que le spam et rien d'autre). Heureusement, on peut s'en protéger. La solution /a minima/ consiste à vérifier que les champs $nom et $email ne contiennent aucun saut de ligne. Tu peux aller plus loin, en vérifiant d'abord que l'adresse de courriel est syntaxiquement correcte : <http://faqfclphp.free.fr/#rub5.3>. Pour bien faire, il faudrait aussi encoder le nom selon MIME (RFC 2047) si jamais il contient des caractères non ASCII, mais je parierais bien que la classe PHPMailer indiquée par Jean-François sait le faire.
Merci pour cette très claire explication. -- Serge Nazarian Pour m'écrire directement : http://cerbermail.com/?ZDkROVSJlu
Olivier Miakinen a écrit le 27/09/2016 :
Le 27/09/2016 09:18, Serge Nazarian m'a répondu :
Il faudrait que $nom et $email soient syntaxiquement corrects, mais
je ne peux pas en juger comme ça. J'espère qu'ils ne viennent pas
directement d'une requête faite à l'utilisateur, sans contrôle, car
sinon ton script peut être utilisé pour spammer la terre entière.
Je ne plaisante pas.
Peux-tu m'en dire un peu plus sur le risque de « spammer la terre
entière » car effectivement $nom et $email proviennent d'un formulaire
rempli par l'utilisateur.
Très volontiers.
Dans un courriel, ce qui sépare les entêtes du contenu du message,
c'est juste deux sauts de ligne de suite. Avoir un contrôle sur une
partie du contenu d'un entête suffit alors pour ajouter d'une part
de nombreux autres entêtes, d'autre part le corps du message lui-même.
Pour cela, il suffit que le paramètre $nom ou $email contienne par
exemple :
"n
Subject: achetez mon beau produitn
To: <adresse_spammée_1>n
To: <adresse_spammée_2>n
...
To: <adresse_spammée_3000>n
n
J'ai un superbe produit à vendre, achetez-le.n
Allez sur <site_de_spam>.n
...
...n"
Le spammeur peut faire mieux, d'abord en complétant le champ From
au lieu de l'interrompre brutalement, et aussi en envoyant son
spam en MIME Multipart, ce qui relègue le *vrai* contenu de ton
message dans une zone cachée (il ne reste donc plus que le spam
et rien d'autre).
Heureusement, on peut s'en protéger. La solution /a minima/ consiste
à vérifier que les champs $nom et $email ne contiennent aucun saut
de ligne.
Tu peux aller plus loin, en vérifiant d'abord que l'adresse de courriel
est syntaxiquement correcte : <http://faqfclphp.free.fr/#rub5.3>. Pour
bien faire, il faudrait aussi encoder le nom selon MIME (RFC 2047) si
jamais il contient des caractères non ASCII, mais je parierais bien
que la classe PHPMailer indiquée par Jean-François sait le faire.
Merci pour cette très claire explication.
--
Serge Nazarian
Pour m'écrire directement : http://cerbermail.com/?ZDkROVSJlu
Il faudrait que $nom et $email soient syntaxiquement corrects, mais je ne peux pas en juger comme ça. J'espère qu'ils ne viennent pas directement d'une requête faite à l'utilisateur, sans contrôle, car sinon ton script peut être utilisé pour spammer la terre entière. Je ne plaisante pas.
Peux-tu m'en dire un peu plus sur le risque de « spammer la terre entière » car effectivement $nom et $email proviennent d'un formulaire rempli par l'utilisateur.
Très volontiers. Dans un courriel, ce qui sépare les entêtes du contenu du message, c'est juste deux sauts de ligne de suite. Avoir un contrôle sur une partie du contenu d'un entête suffit alors pour ajouter d'une part de nombreux autres entêtes, d'autre part le corps du message lui-même. Pour cela, il suffit que le paramètre $nom ou $email contienne par exemple : "n Subject: achetez mon beau produitn To: <adresse_spammée_1>n To: <adresse_spammée_2>n ... To: <adresse_spammée_3000>n n J'ai un superbe produit à vendre, achetez-le.n Allez sur <site_de_spam>.n ... ...n" Le spammeur peut faire mieux, d'abord en complétant le champ From au lieu de l'interrompre brutalement, et aussi en envoyant son spam en MIME Multipart, ce qui relègue le *vrai* contenu de ton message dans une zone cachée (il ne reste donc plus que le spam et rien d'autre). Heureusement, on peut s'en protéger. La solution /a minima/ consiste à vérifier que les champs $nom et $email ne contiennent aucun saut de ligne. Tu peux aller plus loin, en vérifiant d'abord que l'adresse de courriel est syntaxiquement correcte : <http://faqfclphp.free.fr/#rub5.3>. Pour bien faire, il faudrait aussi encoder le nom selon MIME (RFC 2047) si jamais il contient des caractères non ASCII, mais je parierais bien que la classe PHPMailer indiquée par Jean-François sait le faire.
Merci pour cette très claire explication. -- Serge Nazarian Pour m'écrire directement : http://cerbermail.com/?ZDkROVSJlu