Formulaire de contact

Bonjour ,
j’ai fait un formulaire de contact (http://www.ladoucaine.fr/Contact.html) qui est sensé fonctionner (du moins, moi,quand je le teste, cela fonctionne niquel…sous IE7 et FF)
Il fonctionne , oui, je reçois bien les infos bidons que je place dans les champs.
Sauf que je reçois des mails bizarres provenant par le biais de ce formulaire avec comme sujet <>, et dans le texte du mail je reçois simplement les intitulés des champs (sans rien derrière ) comme si c’était remplit à l’encre invisible???
-Est-ce un polueur du web qui tente d’envoyer une pub débile?
-Ou est-ce quelqu’un qui envoi ce formulaire avec une police, un ordi un OS particulier, que je ne peux pas décrypter?
-Ou est-ce un marsien?
-Ou autre…
Pouvez-vous m’aider, je ne vois pas du tout le problème…
Petite précision: je ne suis pas un dieu en programmation…
Merci à vous

Voici ma page traitement.php:

La Douçaine - contact
<div id="totalformul">    

	<a href="http://www.ladoucaine.fr">
	<div id="titre">
	</div>
	</a>
        
	<div id="formulairecontact">
<?php $mail = $_POST['mail']; $nom = '- Nom du responsable:
'.$nom.'

'; $prenom = '- Prénom :
'.$prenom.'

'; $telephone = '- Téléphone :
'.$telephone.'

'; $adressepostale = '- Adresse :
'.$adressepostale.'

'; $raison = '- Raison sociale :
'.$raison.'

'; $description = '- Description du projet :
'.$description.'

'; $budget = '- Budget :
'.$budget.'

'; $date = '- Date du projet:
'.$date.'

'; $raison2 = '- Connu la Douçaine par? :
'.$raison2.'

'; $adresse="contact@ladoucaine.fr"; $from="From: <$mail>\r\n"; $from.="Reply-To: <$mail>\n"; $from.="X-priority:3\n"; $from.="MIME-Version: 1.0\r\n"; $from.="Content-Type: text/html"; $sujet = 'Nouveau formulaire envoyé'; $message = $nom.'
'.$prenom.'
'.$telephone.'
'.$adressepostale.'

'.$raison.'
'.$description.'
'.$budget.'
'.$date.'
'.$raison2; if (mail($adresse, $sujet, $message, $from)) echo("


Votre message a bien été envoyé. Merci !


Cliquez ici pour revenir à l'accueil"); else echo("


Problème à l'envoi du mail...désolé nous ne pouvons actuellement traiter votre demande

"); ?>
	</div>

</div>

salut,

$nom = ‘- Nom du responsable:

’.$nom.’

’;

ça implique que ton register_globals soit activé sinon tu reçoit une erreur car $nom n’a pas été déclaré.

Mais dans tous les cas, register_globals est une aberration! Car en passant des arguments dans l’url on créerait des variables dans ton script sans que tu le veuille!

Bref refait ton script en récupérant proprement tes variables post

OUah!!! Super!, oui, mais heu, je n’ai malheureusement pas tout compris…sorry…
En clair que dois-je supprimer , je ne maitrise pas du tout ce jargon…
Merci de ton aide…

lol scuse

Les paramètres post ou get sont normalement stockées dans des “superglobales” ($_POST, $_GET et $_REQUEST).
Mais il existe une option de php (register_globals) qui transforme ces paramètres en variables classiques ($nom, $email…).
Toi tu récupères tes paramètres comme si register_globals était activé. Ca pose forcément un problème : soit ton register globals n’est en fait pas activé et c’est pourquoi tu n’arrives pas à récupérer tes paramètres, soit il est activé mais c’est mal! (faudra chercher ailleurs le problème mais faut le désactiver).

Il faut que tu appeles la page “phpinfo.php” qui doit se trouver à la racine de ton site. Ca va lister toute la configuration de ton php.
Si tu vois que “register_globals” est à “off”, le réglage est ok mais ça veut dire que ton erreur vient de là.
S’il est à “on”, il faut changer ça! (soit tu as la main sur les fichiers php et faut modifier “config.php”, soit tu dois demander à ton hébergeur. (et dans tous les cas il faudra modifier ta façon de récupérer les arguments dans tout ton site! c’est laborieux mais important!)


par exemple la ligne $nom = '- Nom du responsable:
'.$nom.'

'; deviendra $nom = '- Nom du responsable:
'.$_REQUEST['nom'].'

'; Edité le 06/03/2009 à 10:20

OK, merci, je crois commencer à comprendre, d’abord je cherche mon fichier phpinfo.php
Je vais voir ensuite


[quote="_kiki"]

Il faut que tu appeles la page “phpinfo.php” qui doit se trouver à la racine de ton site. ;
[/quote]

Oui, mais peux-tu être encore plus clair, je ne trouve pas ce fichier sur mon serveur, et lorsque je tape mon url de site avec phpinfo.php à la suite, je n’obtiens rien…?
Merci encore


J'oubliais, on m'a parlé aussi de Captcha, ne penses-tu pas que cela soit un "spam" d'ordi?

oui il est possible que tu n’aie pas ce fichier… Demandes à ton hébergeur si register_globals est activé. si oui dit lui de le désactiver.

Une captcha ne servira a rien pour l’instant. Tu as d’autres modifs de sécurités bien plus importantes à faire car si on appelle directement traitement.php on dirait bien que ça t’envoie un mail :ange:

tu dois :

-récupérer les $_POST et pas les variables créées par register_globals
-filter les données : le filtre javascript est un filtre ergonomique, pour la sécurité tu ne peux te fier qu’à php. (tu dois t’assurer que les données que tu va manipuler correspondent à ce que tu attendais) (ça évitera par exemple d’envoyer des emails vides :wink:
Edité le 06/03/2009 à 13:01

C’est fort, car, moi, quad je m’envoyais un mail pour essayer, je recevais bien toutes les données que j’avais rentrées…
Bref,
je viens d’effectuer la demande pour le fichier register machin…
J’attends la réponse…et je te tiens au courant
Merci

oui c’est normal qu’avec des données ça passe (et que tu reçoive le mail)! le problème c’est que ça passe aussi sans données! (et même sans passer par le formulaire aparemment)

Peut-être est-ce toi? qui fait des essaies?
J’ai reçu 3 formulaires entre 12h58 et 13h47
Dont un mentionnait:
Ceci est un test
Si tu lis cela

Et voilà, c’est tout
Les 2 autres sont vierges

Voilà, j’attends tjrs la réponse de mon hébergeur…

lol oui c’est moi donc tu as bien le register_globals d’activé!

j’ai fait ce test sans passer par ton formulaire (en appelant directement traitement.php?nom=ceci_est_un_test&prenom=si_tu_lis_cela…)
Donc un script appelant sans cesse ta page pourrait vite saturer ta boite mail… (c’est un exemple bien gentil mais il peut t’arriver bien pire si tu ne filtre pas tes données :wink: )

Voici la réponse de mon serveur

[i]Pour une meilleure sécurité, il est idéal de placer la variable register_globals sur Off.
Cette position est d’ailleurs demandée par le CMS Joomla lors de son installation.

Il vous faut créer votre fichier php.ini en y plaçant le contenu suivant :

register_globals = Off

Transférez alors le fichier dans l’ensemble des répertoires de votre application afin de voir la valeur PHP modifiée.[/i]

Je vais donc tenter cette opération…
Ce fihier php.ini n’existe-t-il pas déjà?

Il abusent un peu! mais bon, sur un site mutialisé… peut être que d’autres ont besoin du register_globals…

bref, oui normalement le php.ini est dans les sources de php, mais là ton hébergeur te propose un bricolage.
Essaye de faire comme ils te disent ça devrait marcher.

(et n’oublies pas de faire les modifs que je t’ai proposé :wink: )

Bon,
j’ai fait ce fichier intitulé php.ini
et dedans j’ai mis cela

<? register_globals = Off; ?>

Et je vais le upl sur la raine du site…
bon, peut-être que j’ai tout faux, mais ne rigole pas, stp…

c’est presque ca.
en fait c’est un fichier texte tout simple, pas un fichier php, donc il ne faut pas mettre

<? register_globals = Off; ?>

mais simplement
register_globals = Off

Bon,
alors, maintenant, je dois faire ce que tu m’as dit à savoir:

$nom = ‘- Nom du responsable:

’.$nom.’

’;
deviendra
$nom = ‘- Nom du responsable:
’.$_REQUEST[‘nom’].’

’;

En gros je dois rajouter $_REQUEST[] en plus sur les lignes…

attend c’est pas parfait ça désolé…

met plutôt
$nom = ‘- Nom du responsable:

’.$_POST[‘nom’].’

’;

Bon, voici donc ce que donne mon fichier traitement .php avec tes modifs…
N’ai-je rien n’oublié maître?

<?php $mail = $_POST['mail']; $nom = '- Nom du responsable:
'.$_POST['nom'].'

'; $prenom = '- Prénom :
'.$_POST['prenom'].'

'; $telephone = '- Téléphone :
'.$_POST['telephone'].'

'; $adressepostale = '- Adresse :
'.$_POST['adressepostale'].'

'; $raison = '- Raison sociale :
'.$_POST['raison'].'

'; $description = '- Description du projet :
'.$_POST['description'].'

'; $budget = '- Budget :
'.$_POST['budget'].'

'; $date = '- Date du projet:
'['date'].'

'; $raison2 = '- Connu la Douçaine par? :
'.$_POST['raison2'].'

'; $adresse="contact@ladoucaine.fr"; $from="From: <$mail>\r\n"; $from.="Reply-To: <$mail>\n"; $from.="X-priority:3\n"; $from.="MIME-Version: 1.0\r\n"; $from.="Content-Type: text/html"; $sujet = 'Nouveau formulaire envoyé'; $message = $nom.'
'.$prenom.'
'.$telephone.'
'.$adressepostale.'

'.$raison.'
'.$description.'
'.$budget.'
'.$date.'
'.$raison2; if (mail($adresse, $sujet, $message, $from)) echo("


Votre message a bien été envoyé. Merci !


Cliquez ici pour revenir à l'accueil"); else echo("


Problème à l'envoi du mail...désolé nous ne pouvons actuellement traiter votre demande

"); ?>

lol

si y’a un truc qui cloche petit padawan…

$date = ‘- Date du projet:

’[‘date’].’

’;

Oups, il y avait un oubli
sur

$date = ‘- Date du projet:

’.$_POST[‘date’].’

’;

Voilà, rectifié


Bon, visiblement j'ai fait un essai, et je reçois les données que je me place.... mais, ça cela marchait avant, Je crois qu'il n'y a plus qu'à attendre d'avoir un mail de l'homme invisible(si jamais il réapparaît...)

Que me conseilles-tu d’autre, grandgourou?

Si tu t’y connais aussi en multilinguisme, je me prends aussi la tête avec cela…

Encore merci pour ton temps passé à aider un naze du php comme moi…

ok donc maintenant c’est un peu plus dur de t’envoyer des spams. Mais ce n’est pas parfait.

Si tu ne reçois plus de spams tu peux t’en contenter, mais la règle de l’art voudrais que tu filtre toutes les données avant de le manipuler (vérifier que l’email a la forme d’un email, etc…)

Et si tu veux t’amuser, il faudrait t’assurer que les données viennent obligatoirement de ton formulaire. Par exemple tu hashe un code en sha1, tu le met dans un champ caché, dans traitement.php tu le décrypte, et si ce n’est pas le code attendu tu n’envoie pas le mail.