Probleme formulaire de contact

nomisconception Messages postés 2 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 22 juin 2009 - 21 juin 2009 à 02:37
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 - 22 juin 2009 à 20:22
Bonjour
Je suis novice dans la programmation en php... Je suis actuellement occupé de créer un site internet pour des amis qui parte faire un tour du monde en solex.
Je leur est faite leur site (je suis étudiant graphiste), mais je ne suis pas programmeur...
J'ai été ennuié par des injections (html iframe-inf..) est je cherche a empêcher l'injection dans le formulaire... htmlentities serais la meilleur solution, mais je ne sais pas ou le mettre dans mon code... Je cherche donc quelqu'un pour aider un pauvre novice qui subis les injections et qui ne sais comment lutter

merci d'avance

voici mon code :

<?php
//
// Verifier que les informations sont postes
//
if($_POST['submit_mess']) {
if(isset($_POST) && isset($_POST['name']) && isset($_POST['surname']) && isset($_POST['mail'])  && isset($_POST['message'])) {
    extract($_POST);
    // Simplifier l'criture de "$_POST["nomdelavarible] en "$nomdelavariable"
    if(!empty($name) && !empty($surname) && !empty($mail) && !empty($message)) {
        // Dfinition des variables
        $message=str_replace(""","'",$message);
        $message=str_replace("v","",$message);
        $message=str_replace("","",$message);
        $message=str_replace("v","",$message);
        $message=str_replace("v","",$message);
        // Remplacer des caractres spciaux
        $destinataire="contact@avelosolex.com";
        $expediteur=$mail;
        $reponse=$expediteur;
        $sujet="Message du site français";
        // Retour  la ligne :  \n
        $message="Un nouveau message du site francais est arrive\n
                Name : $name \n
                Surname : $surname \n
                Mail : $mail \n
                Message : $message";
        $entete="From: $mail";
        mail($destinataire, $sujet, $message, $entete);
   
    }
}
}
<html>
<head>
<title>avelosolex.com</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="css/template.css" rel="stylesheet" type="text/css">
<link href="css/contact.css" rel="stylesheet" type="text/css">
<script type="text/javascript" language="Javascript" >
        function check() {
            // D?claration de la variable pour le message type qui s'affichera
            var msg = 'Merci de remplir les champs présents :\n \n' ;
            var lgMsg = msg.length;
        // D?claration des variables pour les expressions r?guli?res
            var mail = new RegExp(/^[A-Za-z0-9\.\-_]+@[A-Za-z0-9\-]+\.[a-zA-Z\.\-_]{1,}/gi);
        // Test des diff?rents champs
            // V?rification du nom            if (document.form.name.value "" || document.form.name.value "Name") {
                msg += '- Name\n';
                document.form.name.style.backgroundColor = "#FF0000";
            }
            // V?rification du pr?nom            if (document.form.surname.value "" || document.form.surname.value "Surname") {
                msg += '- Surname\n';
                document.form.surname.style.backgroundColor = "#FF0000";
            }
            // V?rification du mail
            if (document.form.mail.value == '' || !mail.test(document.form.mail.value)) {
                msg += '- Mail (ex : "xxxx@yyyy.zzzz")\n';
                document.form.mail.style.backgroundColor = "#FF0000";
            }
            // V?rification du message              if (document.form.message.value 'Message' || document.form.message.value '') {
                msg += '- Message\n';
                document.form.message.style.backgroundColor = "#FF0000";
            }
            // Message si les champs ne sont pas remplis correctement
            if ( msg.length > lgMsg ) {
                alert(msg);
                return(false);
            // Message si tout est OK
            } else {
                alert('Merci pour votre message.\nil est envoyé...\ncliquez sur ok pour continuer.\nCette page sera rafreshie.');
                return(true);
            }
        }
    //-->
    </script>

<style type="text/css">
<!--
.Style1 {color: #FF0000}
-->
</style>
</head>

        <table width="896" height="111" border="0">
          ----

           , &nbsp;</td>
            &nbsp;,
         
          ----

            &nbsp;,
            <form action="https://www.paypal.com/cgi-bin/webscr" method="post">

</form>,
         
       
            </td>
  </tr>
    <tr>
        <td width="894" height="736" background="images/template/arriere_plan.jpg">          ----

                        <table border="0" align="center"id="table_menu">
              ----

               , [mentions-legale.html MENTIONS LEGALES]  -  [plan.html PLAN DU SITE]</td>
  </tr>
    <tr>
        <td>
            </td>
  </tr>
</table>

</html>

6 réponses

cs_TropNul Messages postés 340 Date d'inscription dimanche 18 septembre 2005 Statut Membre Dernière intervention 22 octobre 2009
21 juin 2009 à 13:19
Bonjour,

Tu peux aussi utiliser html_special_chars(), qui lui se restreint à quelques caractères uniquement. Néanmoins, pour htmlentities(), voici comment je ferais :

foreach ($_POST as $key => $valeur) {
   $_POST['.$key.']=htmlentities($valeur);
}

Ce code doit être mis avant la fonction extract() que tu utilises.

Cordialement
0
cs_TropNul Messages postés 340 Date d'inscription dimanche 18 septembre 2005 Statut Membre Dernière intervention 22 octobre 2009
21 juin 2009 à 13:20
Errata : C'est htmlspecialchars() et non html_special_chars()
0
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
21 juin 2009 à 14:12
tout d'abord fait les vérif que tu fais en js également coté serveur... si je désactive le js je pourrais envoyer n'importe quoi dans les champs ils ne seront pas controlés... le js n'est la que pour le confort de l'utilisateur (évite de recharger la page) pas pour la sécu... .. .

Pour corps de ton mail htmlentities() fera l'affaire mais pense aussi à vérifier l'adresse mail pour éviter une header injection dans ta fonction mail() qui est, avec ton code, beaucoups plus probable et embêtant qu'une pauvre attage xss dans le corps du mail... .. .

@ tchaOo°

l'homme est un loup pour l'homme... .. .
0
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
21 juin 2009 à 14:13
au fait...

extract($_POST);

à proscrire

@ tchaOo°

l'homme est un loup pour l'homme... .. .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nomisconception Messages postés 2 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 22 juin 2009
22 juin 2009 à 01:24
Salut à vous tous,

Merci beaucoup pour vos conseils!!
Je vais essayé de faire cela. Je vous tiens au courant

Merci encore

Cordialement

nomisconception
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
22 juin 2009 à 20:22
Salut,

QQ remarques en allant :

$message=str_replace(""","'",$message);
$message=str_replace("v","",$message);
$message=str_replace("","",$message);
$message=str_replace("v","",$message);
$message=str_replace("v","",$message);
=>
à quoi cela sert il ?
En plus tu peux le résumer à :
$message=str_replace('"',"'",$message);

$message=str_replace("v","",$message);

Comme le disait Kankrelune le risque majeur est l'injection d'headers dans ta fonction mail, c'est très simple à faire avec ton script. Voir : http://www.phpsecure.info/v2/article/MailHeadersInject.php

Regarde également du côté de strip_tags()

Pour te prémunir du spam évite de mettre ton adresse en clair (page newsletter par exemple) mais préfère un formulaire.

Concernant les injections que tu rencontres es tu sur qu'elles ne proviennent pas d'ailleurs (une page admin, un autre formulaire, ...) ?

Sympa le site et ce tour du monde original.

Cordialement,

Kohntark -
0
Rejoignez-nous