Bonjour,
je ne sais pas si c'est une faille de sécurité et ce qu'on peut en faire, mais voilà ce qui arrive :
Mon site perso possède une page de contact avec... un formulaire de contact ! Quand on veut me contacter, on remplit le formulaire (mail expéditeur, sujet, message) et ça m'envoie le tout par mail.
Hors, je viens de m'apercevoir qu'on peut faire traiter un message par mon formulaire rien qu'en copiant la source de ma page, en la sauvegardant chez soi (sur EasyPHP par exemple), et en modifiant la ligne
par
Du coup, je me demande si on ne peut pas détourner mon formulaire... Si c'est utile, comment me protéger de cela ?
Voici le code de mon formulaire (tout tient en un seul fichier). Je vous épargne les champs antispam.
C'est un formulaire de contact que j'ai trouvé... euh... quelque part. Je l'ai modifié à ma sauce. Pour ce post, j'ai viré la mise en forme.
Merci de votre aide !
Modifié par Gasp75 (23 Apr 2008 - 14:57)
je ne sais pas si c'est une faille de sécurité et ce qu'on peut en faire, mais voilà ce qui arrive :
Mon site perso possède une page de contact avec... un formulaire de contact ! Quand on veut me contacter, on remplit le formulaire (mail expéditeur, sujet, message) et ça m'envoie le tout par mail.
Hors, je viens de m'apercevoir qu'on peut faire traiter un message par mon formulaire rien qu'en copiant la source de ma page, en la sauvegardant chez soi (sur EasyPHP par exemple), et en modifiant la ligne
<form method="post" action="/contact.php">
par
<form method="post" action="http://www.monsiteperso.com/contact.php">

Du coup, je me demande si on ne peut pas détourner mon formulaire... Si c'est utile, comment me protéger de cela ?
Voici le code de mon formulaire (tout tient en un seul fichier). Je vous épargne les champs antispam.
<?php
$email_webmaster = "moi@monsiteperso.com";
// === début de traitement des données du formulaire =======================================================
if (isset($_POST["envoyer"])){
// le formulaire a été soumis
$etat = "erreur";
// Valeur par défaut. Prendra la valeur "ok" s'il n'y a pas d'erreur
if (isset($_POST["email_expediteur"])) {
$email_expediteur = trim(stripslashes(htmlentities(strip_tags($_POST["email_expediteur"]))));
}
if (isset($_POST["titre"])) {
$_POST["titre"] = trim(stripslashes(strip_tags($_POST["titre"])));
}
if (isset($_POST["message"])) {
$message = trim(stripslashes(strip_tags($_POST["message"])));
$message = str_ireplace("http://","Site web : ",$message);
//--- si je laisse http:// dans le message, le mail ne m'arrive jamais.
}
// --- test de la validité des champs saisis ---
if (empty($_POST["email_expediteur"])) {
// il manque l'email de l'expéditeur
$erreur="Saisissez votre adresse email.";
}
elseif (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$",$email_expediteur)){
// l'adresse e-mail n'est pas valide
$erreur="Votre adresse e-mail n'est pas valide.";
}
elseif (empty($_POST["message"])) {
// le message est vide
$erreur="Saisissez un message.";
}
else {
// --- tous les champs sont correctement remplis: on pourra envoyer le mail ---
$etat="ok";
}
}
else {
// --- le formulaire n'a pas été soumis ---
$etat="attente";
}
// === fin de traitement des données du formulaire =======================================================
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Contact</title>
</head>
<body>
<?php
if ($etat!="ok"){// le formulaire n'a pas été soumis, ou soumis avec une erreur
if ($etat=="erreur"){
//le formulaire a été soumis avec une erreur
echo "<p id=\"form_err\"><strong>".$erreur."</strong></p>\n";
// afficher le message d'erreur
}
?>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
<p><label for="email_expediteur">Votre adresse e-mail :</label><br />
<input type="text" size="40" name="email_expediteur" id="email_expediteur" value="<?php
if (!empty($_POST["email_expediteur"])) {
// l'adresse email de l'expéditeur a été saisie: la réafficher
echo htmlspecialchars($_POST["email_expediteur"],ENT_QUOTES);
}
?>" />
</p>
<p><label for="titre">Titre de votre message :</label><br />
<input type="text" size="40" name="titre" id="titre" value="<?php
if (!empty($_POST["titre"])) {
// le titre du message a été saisi: le réafficher
echo htmlspecialchars($_POST["titre"],ENT_QUOTES);
}
?>" />
</p>
<p><label for="message">Message :</label><br />
<textarea name="message" id="message" cols="40" rows="7"><?php
if (isset($_POST["message"])) {
// le message a été saisi: le réafficher
echo htmlspecialchars($_POST["message"],ENT_QUOTES);
}
?></textarea><br />
</p>
<p><input type="submit" name="envoyer" value="Envoyer" />
</p>
</form>
<?php
}
else {
// le formulaire a été soumis sans erreur, on envoie le mail
$entete = "From: ".$email_expediteur." <".$email_expediteur.">\n";
$entete .= "Reply-to : $email_webmaster <$email_webmaster>\n";
$entete .= "X-Mailer [langue]HP\n";
$entete .= "MIME-Version: 1.0\n";
$entete .= "Content-type: text/plain; charset=iso-8859-1\n";
$message = "$message\n";
if (@mail($email_webmaster,$_POST["titre"],$message,$entete)){
// mail envoyé
echo "Votre message a été envoyé.<br />\n";
echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Retour au formulaire.</a><br />\n";
echo "<a href=\"index.php\">Retour à la page d'accueil.</a>\n";
}
else {
// erreur lors de l'envoi du mail
echo "Un problème s'est produit lors de l'envoi du message.\n";
echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Réessayez...</a>\n";
}
}
?>
</body>
</html>
C'est un formulaire de contact que j'ai trouvé... euh... quelque part. Je l'ai modifié à ma sauce. Pour ce post, j'ai viré la mise en forme.
Merci de votre aide !

Modifié par Gasp75 (23 Apr 2008 - 14:57)