Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Script super simple exploitant la fonction MAIL de PHP pour correction ?

9 réponses
Avatar
miaoumix
Bonjour,
Je souhaiterais mettre a disposition des débutants (comme
moi) un petit script simple qui utilise la fonction mail de php.
Quand on débute on aime bien voir les fonctions par l'exemple.
Enfin, moi j'aime bien..
Je vous soumet donc mon petit bout de code avant de le publier
pour voir si j'ai rien oublié.
Par avance Merci.

Question subsidiaire : Comment pourrais t'ont rajouter
le plus simplement du monde l'envoie d'une pièce jointe
à l'aide de la fonction PHP base64_encode()?


==formulaire.html==
<body>
<form name="form1" method="post" action="email.php">
<p><label>Sujet <input name="sujet" type="text" id="sujet"></label></p>
<p><label>Nom <input name="nom" type="text" id="nom"></label></p>
<p><label>Prenom <input name="prenom" type="text" id="prenom"></label></p>
<p><label>Telephone <input name="telephone" type="text"
id="telephone"></label></p>
<p><label>Adress Email <input name="email_visiteur" type="text"
id="email_visiteur"></label></p>
<p><label>Message <textarea name="message_txt"
id="message_txt"></textarea></label></p>
<p><label><input type="submit" name="Submit" value="Envoyer"></label></p>
</form>
</body>

==email.php==
<?
$sujet = $_POST['sujet'];
$message .= "\nNom: " . $_POST['nom'];
$message .= "\nPrenom: " . $_POST['prenom'];
$message .= "\nTelephone: " . $_POST['telephone'];
$message .= "\nMessage: " . $_POST['message_txt'];
$email_visiteur = $_POST['email_visiteur'];
mail ("destinataire@chez.vous", "$sujet", "$message", "FROM:
$email_visiteur");
header ("Location: merci.html");
?>

9 réponses

Avatar
Olivier Miakinen

Je souhaiterais mettre a disposition des débutants (comme
moi) un petit script simple qui utilise la fonction mail de php.


C'est une bonne idée... sauf que la fonction mail est bien trop sensible
pour la confier à des débutants ! Plus exactement, ce serait justement
une excellente idée si tu arrivais à ne plus être débutant, et donc à
éviter les erreurs qui font de ton code un relais à spam. Une fois ceci
réalisé, la donner en exemple aux autres débutants serait vraiment super.

Quand on débute on aime bien voir les fonctions par l'exemple.
Enfin, moi j'aime bien..
Je vous soumet donc mon petit bout de code avant de le publier
pour voir si j'ai rien oublié.


Tu fais bien de poser la question puisque justement tu es tombé dans le
même piège que quelqu'un d'autre qui a publié sa mésaventure ici même
voilà quelques semaines.

[...]

==email.php= > <?
$sujet = $_POST['sujet'];


Tu ne fais absolument aucun contrôle ici, et c'est là qu'est le gros bug.

$message .= "nNom: " . $_POST['nom'];
$message .= "nPrenom: " . $_POST['prenom'];
$message .= "nTelephone: " . $_POST['telephone'];
$message .= "nMessage: " . $_POST['message_txt'];


Tu ne fais pas de contrôle là non plus, mais c'est moins grave.

$email_visiteur = $_POST['email_visiteur'];


Et là, c'est ausi dangereux que dans le sujet.

mail ("", "$sujet", "$message", "FROM:
$email_visiteur");


Et PAF ! Il suffit que quelqu'un mette par exemple dans le sujet la
chaîne suivante (variante possible avec le from) :

"Achetez du Viagra !nBcc: (ici mettre une liste d'un million d'adresses
à spammer)nFrom: (ici mettre une fausse adresse)nContent-Type: (on
peut mettre text, ou MIME multipart, ou HTML, etc.)nn(ici mettre le
corps du spam)"

Et voilà. Avec une utilisation de ton formulaire, quelqu'un utilise ton
serveur pour envoyer un spam pour le viagra à un million de personnes.


Cordialement,
--
Olivier Miakinen

Avatar
Olivier Miakinen

Je souhaiterais mettre a disposition des débutants (comme
moi) un petit script simple qui utilise la fonction mail de php.


À propos de mail et de spam, si tu as choisi la tienne au hasard, au
lieu de demander cette adresse à Yannick Chaudron (propriétaire du nom
de domaine nonmerci.fr), alors tu es en train de faire spammer quelqu'un
qui ne t'a rien demandé. De plus, tu n'as aucun moyen de recevoir les
messages de refus éventuels dans ce groupe modéré, ceux-ci étant aussi
envoyés au serveur de monsieur Chaudron.

Si tu es vraiment dans ce cas (c.-à-d. si tu n'as aucun droit sur cette
adresse), sache qu'il est *très* vivement recommandé de choisir un TLD
(nom de domaine de premier niveau) en « .invalid ».

Exemple : .
Autre exemple : .

Mais surtout pas : .
Ni : (etc.).

Avatar
Christophe, Elite-grafx.com
Et voilà. Avec une utilisation de ton formulaire, quelqu'un utilise ton
serveur pour envoyer un spam pour le viagra à un million de personnes.


Justement, je souhaite completer ton post car quand j'etais debutant, des
scripts comme celui de "miamoumix" ne m'ont pas appris a coder de facon
sécurisé, et cela cree des dégats (Je m'etais fait avoir pour les memes
raisons que tu decris ici, 500 emails toutes les 10 minutes avec un script
trouvé sur le Web...)

Je complete donc ton post par ce lien fort éducatif :
http://www.phpbuilder.com/columns/ian_gilfillan20060412.php3?aid33

Christophe

Avatar
miaoumix

Si tu es vraiment dans ce cas (c.-à-d. si tu n'as aucun droit sur cette
adresse), sache qu'il est *très* vivement recommandé de choisir un TLD
(nom de domaine de premier niveau) en « .invalid ».

Exemple : <pasdespam@***.invalid>.
Autre exemple : <pasdespam@***.fr.invalid>.

Mais surtout pas : <pasdespam@***.fr>.
Ni : <pasdespam@***.com> (etc.).


Salut,
Ok, merci du renseignement. En même temps je le savait
mais j'ignorai que ce nom de domaine était utilisé.
Par contre, remettre l'adresse dans le corps du message
c'est pas non plus malin de tas part si je peut me permettre.
@+

Avatar
Olivier Miakinen

Je complete donc ton post par ce lien fort éducatif :
http://www.phpbuilder.com/columns/ian_gilfillan20060412.php3?aid33


Quant à moi j'ai retrouvé l'article auquel je pensais, vieux d'un mois :
<http://groups.google.fr/group/fr.comp.lang.php/msg/d9014948984c63df>.
Malheureusement je n'ai pas réussi à retrouver les réponses avec Google
groups.

Avatar
miaoumix
Je complete donc ton post par ce lien fort éducatif :
http://www.phpbuilder.com/columns/ian_gilfillan20060412.php3?aid33


Quant à moi j'ai retrouvé l'article auquel je pensais, vieux d'un mois :
<http://groups.google.fr/group/fr.comp.lang.php/msg/d9014948984c63df>.
Malheureusement je n'ai pas réussi à retrouver les réponses avec Google
groups.


Mouais, bon OK.
Je vais donc continuer a utiliser le CGI de mon FAI.
Je laisse tomber le PHP trop compliqué pour moi.
Le problème, c'est qu'on nome "Faille" une utilisation détourné
d'une fonction. Moi perso, j'appel ca du Hack et voilà tout.
Je comprend mieux les efforts qu'il doit être nécessaire
pour sécurisé un système quel qu'il soit...


Avatar
Olivier Miakinen

Je vais donc continuer a utiliser le CGI de mon FAI.


Pour l'envoi de courriel, ça me semble sage.

Je laisse tomber le PHP trop compliqué pour moi.


Si tu n'en as pas l'utilité par ailleurs, pourquoi pas. Mais sinon il
serait dommage que tu t'interdises toute utilisation de PHP simplement
parce que tu as commencé par un truc un peu trop sensible.

[...]
Je comprend mieux les efforts qu'il doit être nécessaire
pour sécurisé un système quel qu'il soit...


Si tu as compris ça, tu n'as vraiment pas perdu ton temps. Bravo.

<HC>
Je profite aussi de cet article pour répondre à ta remarque concernant
le fait que je n'aurais pas dû mettre les adresses en clair dans le
corps de mon article précédent. Pour les .invalid qui ne seront jamais
des adresses valides, cela n'a aucune importance ; quant à l'adresse
en .fr que tu as eue dans ton From, d'une certaine manière c'est trop
tard. Mais pour le .com, tu as raison : même si les corps des articles
et les Reply-To sont mille fois moins spammés que les From, je n'aurais
pas dû le faire.

Cela dit, je suis parfaitement hors-charte, aussi je te propose de
continuer la discussion en privé si tu le souhaites. Mon adresse est valide.
</HC>

--
Olivier Miakinen

Avatar
pascal
Je complete donc ton post par ce lien fort éducatif :
http://www.phpbuilder.com/columns/ian_gilfillan20060412.php3?aid33


Quant à moi j'ai retrouvé l'article auquel je pensais, vieux d'un mois :
<http://groups.google.fr/group/fr.comp.lang.php/msg/d9014948984c63df>.
Malheureusement je n'ai pas réussi à retrouver les réponses avec Google
groups.


Mouais, bon OK.
Je vais donc continuer a utiliser le CGI de mon FAI.
Je laisse tomber le PHP trop compliqué pour moi.
Le problème, c'est qu'on nome "Faille" une utilisation détourné
d'une fonction. Moi perso, j'appel ca du Hack et voilà tout.
Je comprend mieux les efforts qu'il doit être nécessaire
pour sécurisé un système quel qu'il soit...


L'utilisation de la class phpmailer devrait permettre d'utiliser cette
maudite fonction mail en toute sécurité sans trop se prendre la tête.
A confirmer pour le coté sécurité.

Pascal



Avatar
Florian Sinatra
Je vais donc continuer a utiliser le CGI de mon FAI.
Je laisse tomber le PHP trop compliqué pour moi.


Dommage. Le PHP est un langage des plus simples, c'est le contexte de la
sécurité abordé ici qui est difficile. Mais cette difficulté n'est pas
propre à PHP, mais au domaine plus large du dév web.

Le problème, c'est qu'on nome "Faille" une utilisation détourné
d'une fonction. Moi perso, j'appel ca du Hack et voilà tout.


La faille permet qu'il y ait "utilisation détournée d'une fonction" -
crack (ou hack si tu préfères*). Les deux ne sont pas synonymes, mais
cause et conséquence.

Je comprend mieux les efforts qu'il doit être nécessaire
pour sécurisé un système quel qu'il soit...


Effectivement. C'est probablement le côté le plus difficile du dév web.

*pascal* @ 16/04/2006 22:10 :
L'utilisation de la class phpmailer devrait permettre d'utiliser cette
maudite fonction mail en toute sécurité sans trop se prendre la tête.
A confirmer pour le coté sécurité.


Voir aussi la classe de Léo West (pas testée) :
<http://lwest.free.fr/doc/php/lib/index.php3?page=mail&lang=fr>

--
|///| * J'aime chipoter avec l'exactitude des mots. Un hacker
| _ _| est à l'origine un bidouilleur doué. C'est le cracker,
(| (.)(.) ou 'black hat hacker' qui est malintentionné. ;-)
| ___ voir <http://fr.wikipedia.org/wiki/Hacker>
|____/
/ _florian_
//