OVH Community, votre nouvel espace communautaire.

Plus possible d'envoyer des emails depuis un form sur mutualisé ?


chmod777
28/02/2016, 17h45
Hmm, c'est un peu le foutoir, et à vue de nez comme ça :
- pas de contrôle de la syntaxe de l'email (et donc, il me semble, risque d'injection d'headers au niveau du $headers).
- failles xss.
- un for() qui peut être exécuté 9999999 fois si je passe ce nombre dans le $_POST['nbre_champs_texte']

frank69
28/02/2016, 17h00
Citation Envoyé par Gaston_Phone
Je me demande si tu ne devrais pas plutôt t'adresser à ton développeur freelance.
Car tu risques de faire un joli "caca".
Effectivement, cependant le dev freelance à fait le site il y a maintenant 5 ans. Je ne suis plus en contacte avec lui. Donc je vais devoir faire le boulot moi même ou bien trouver quelqu'un sur codeur...

Si quelqu'un a la réponse à mes deux questions SVP:

1/ Est-ce qu'il vous semble qu'il y a une faille de vulnérabilité dans ce formulaire (injection via JS ou autre) ?
2/ Est-ce que ça fait appelle à des fonctions d'une version PHP plus récente que le formulaire que j'ai quoté dans mon premier message ?

Gaston_Phone
28/02/2016, 16h46
Je me demande si tu ne devrais pas plutôt t'adresser à ton développeur freelance.
Car tu risques de faire un joli "caca".

frank69
28/02/2016, 15h50
Hello,

oui oui, je vais communiquer avec 1&1 dès que ça sera possible (dès que leurs service technique bossera).

Par contre il est possible aussi que ça vienne de mon script qui envoi l'email...
Car j'ai testé un formulaire de contact avec du code "plus récent" et lui fonctionne, alors que l'autre ne fonctionne pas.

Voici le code du formulaire qui fonctionne (il envoi bien un email) :

Code PHP:

$email_dest 
"monmail@gmail.com";

if (
$_POST['envoi']) {

// E-mail headers:
$headers ="MIME-Version: 1.0 \n";
$headers .="From: ".$_POST['zone_email']."<".$_POST['zone_email'].">\n";


$headers .="Content-Type: text/html; charset=iso-8859-1 \n";

$subject "Nouveau Message";

$partie_entete "


"
;

for (
$a=1$a<= $_POST['nbre_champs_texte']; $a++) {
$partie_champs_texte .= "$_POST['titre_champ'.$a] . " : " $_POST['champ'.$a] . "
"
;
}

if (
$_POST['nbre_zone_email'] != 0) {
$partie_zone_email "$_POST['titre_email'] . " : " $_POST['zone_email'] . "
"
;
}

if (
$_POST['nbre_zones_texte'] != 0) {
$partie_zone_texte "$_POST['titre_zone'] . " : " $_POST['zone_texte'] . "
"
;
$partie_zone_texte stripslashes($partie_zone_texte);
}

$fin "";

$sortie $partie_entete $partie_champs_texte $partie_zone_email $partie_zone_texte $fin;

// Send the e-mail
if (@!mail($email_dest,$subject,$sortie,$headers)) {
echo(
"Envoi du formulaire impossible");
} else { 
// Closing if !mail...

// Renvoi Ã* la page de remerciement
header("Location:contact_reponse.php");
exit();

// Fin du else
// Closing if edit
?>
Code PHP:
 ['PHP_SELF']?>" onSubmit="return verifSelection()">
  





      Nom et Prénom*
      
    
     
      Adresse*
      
    
    
      Code Postal*
      
    
    
      Ville*
      
    
    
      Téléphone
      
    
        
      Email*
      
    
    
    
      Votre message*
      
    
      
        


           

        

    
  
  

1/ Est-ce qu'il vous semble qu'il y a une faille de vulnérabilité dans ce formulaire (injection via JS ou autre) ?
2/ Est-ce que ça fait appelle à des fonctions d'une version PHP plus récente que le formulaire que j'ai quoté dans mon premier message ?

Mon problème c'est qu'en plus du form de contact tout bête, j'ai un processus de commande (fait sur mesure par un dev freelance) qui utilise aussi le POST pour envoyer l'email. Et c'est perdu dans les 3 pages du processus de commandes, va falloir que je trouve comment modifier ça, sans tout faire déconner.

Merci pour votre aide en tout cas.
fritz2cat
28/02/2016, 14h57
Citation Envoyé par frank69

D'où vient le problème sur mon formulaire alors ? ...

... , à cet instant T, j'ai pu envoyé un email. Je peux savoir ce qui déconne ?
Rapatrie tes petites affaires chez OVH, et alors tu pourras bénéficier d'une communauté qui pourra mieux t'informer.
Car ça ne sert à rien de demander ici ce qui déconne chez 1+1 ???

frank69
28/02/2016, 13h54
une seconde je test

Alors j'ai modifié le script comme ceci :

ça:
$to = "Adresse_Mail_Destinataire";
par ça :
$to = "email1@gmail.com";

ça
$from = "Adresse_Mail_Contact_site";
en ça:
$from = "email2@gmail.com";
et ça j'ai laissé tel quel:

ini_set("SMTP", "smtp.mondomaine.com");
Et j'ai le msg suivant sur la page :

*** CR_Mail=1 - Mail envoyé
Je reçois bien un email sur mon mail1@gmail.com:
Mail HTML simple : Test Mail - 2016-02-28 13:55

bla bla bla bla
Etc.
D'où vient le problème sur mon formulaire alors ? En sachant que j'ai reçu un email d'un client depuis ce formulaire ce matin.

EDIT: je viens de tester mon formulaire de contact qui ne fonctionnait pas, à cet instant T, j'ai pu envoyé un email. Je peux savoir ce qui déconne ? Car c'est vraiment naze que ça ne fonctionne pas 24/24 7/7. L'envoi d'email via PHP ça existe depuis tout de même pas mal d'année, les hébergements devraient être rodés non ?

janus57
28/02/2016, 13h47
Bonjour,

Comment savoir si ils m'ont coupé le droit d'envoyer des emails ?
demander à leur support ou dans votre panel client.

Comment savoir si la fonction mail utilisé dans mon formulaire fonctionne SVP ?
avec n'importe quel testeur de fonction mail() ou script qui envoie des mail par ce biais.

Vous pouvez me passer un bout de code que je puisse tester sur mon hébergement 1&1 ?
il suffit d'en trouver sur : google et/ou github et/ou openclassroom et vous risquez même de trouver un formulaire au complet et surtout sécurisé car là quand je vois l'utilisation de $_POST dans fonction de protection vous êtes vulnérable, quelqu'un pourrais injecter un malware/trojan ou autre sorte de virus JS puis vous allez ouvrir votre mail et voilà après c'est pas bon pour vous.

Cordialement, janus57

Gaston_Phone
28/02/2016, 13h45
Au fait as-tu testé le script indiqué sur ton site 1&1 ?

frank69
28/02/2016, 13h44
je précise que je n'ai pas accès au forum de 1&1 qui a l'air d'être rattaché à leur domaine americain (en .com) et je ne peux pas me connecter avec mes logins clients 1&1. Certainement parce-que ceux-ci sont français et non US.
J'ai appelé ce matin vers 3h du mat la hotline, réponse : "le service technique n'est pas disponible". J'ai rappelé il y a quelques minutes : "le service technique n'est pas disponible, j'ouvre un ticket urgent, il vous rappellerons, aujourd'hui, demain, je ne sais pas".

Mes clients ne peuvent plus communiquer avec moi... C'est légèrement handicapant.

Gaston_Phone
28/02/2016, 13h42
1&1 a peut-être des critères différents de ceux de OVH.
C'est pourquoi je t'ai suggéré de poster sur le forum de 1&1.

Au fait que t'a t'on répondu sur le forum de 1&1 !

frank69
28/02/2016, 13h33
Bonjour Gaston,

Mon site qui déconne est hébergé sur 1&1. Pourrais-tu toi aussi répondre à ma question :

Comment savoir si ils m'ont coupé le droit d'envoyer des emails ? Comment savoir si la fonction mail utilisé dans mon formulaire fonctionne SVP ? Vous pouvez me passer un bout de code que je puisse tester sur mon hébergement 1&1 ?
Merci.

EDIT: je précise que je n'ai pas accès au forum de 1&1 qui a l'air d'être rattaché à leur domaine americain (en .com) et je ne peux pas me connecter avec mes logins clients 1&1. Certainement parce-que ceux-ci sont français et non US. De plus j'ai bien appelé la hotline et ils m'ont répondu que le service technique n'est pour le moment pas disponible...

J'ai bien reçu un email ce matin depuis le formulaire de contact qui déconne (à 7h ce matin). Cependant, j'ai fait le test aujourd'hui à 3h du matin et à 13 heures, cela ne fonctionne pas. J'ai essayé sous FF & Chrome.

Gaston_Phone
28/02/2016, 13h07
Citation Envoyé par Gaston_Phone
Je n'ai pas très bien compris. Ton problème est-il :
  • Chez OVH : Suit les recommendations de ovniz.
  • Chez 1&1 : Poste ton problème sur le forum de 1&1
Et si tu répondais aux questions que l'on te pose ?

frank69
28/02/2016, 12h54
Citation Envoyé par fritz2cat
Vérifie chez 1&1 si ton formulaire n'a pas été abusé par des spammeurs.
Ils t'ont peut-être coupé le droit d'envoyer des e-mails tant que ce n'est pas résolu.
Mon form n'a pas été abusé par des spammeurs. Je n'ai pas reçu plus de mail que cela ces derniers temps et ceux-ci étaient rédigé par des humains (et pas l'africain qui a un pote qui a gagné au loto et qui a pas de compte bancaire blabla..).


Comment savoir si ils m'ont coupé le droit d'envoyer des emails ? Comment savoir si la fonction mail utilisé dans mon formulaire fonctionne SVP ? Vous pouvez me passer un bout de code que je puisse tester sur mon hébergement 1&1 ?

Merci

fritz2cat
28/02/2016, 10h09
Vérifie chez 1&1 si ton formulaire n'a pas été abusé par des spammeurs.
Ils t'ont peut-être coupé le droit d'envoyer des e-mails tant que ce n'est pas résolu.

Gaston_Phone
28/02/2016, 09h29
Citation Envoyé par frank69
J'ai checké ça marche bien sur OVH. Je me suis trompé, le site qui cause problème (c'est le même script que celui que j'ai sur OVH et qui fonctionne bien) est sur 1&1.
Je crois que 1&1 me fait payer un supplément pour rester sur une version de PHP plus ancienne.
Est-ce que le script que j'ai mis ci-dessus peut fonctionner sur la dernière version de PHP ? Car sinon, je vais avoir de gros souci d'ici peu :S !!

Sais-tu si sur 1&1 il y a eu du changement récemment ?
Je n'ai pas très bien compris. Ton problème est-il :

ovniz
28/02/2016, 07h26
Salut frank69

Ton formulaire est un peu fouillis, difficile de tout regarder en détail.
Mais à priori, c'est fonctionnel.

Par contre, il y a plusieurs problèmes :
- le mail est mal formaté pour envoyer du html. Tu devrais tester un envoi sur mail-tester.com, pour voir ton score sur 10. Et voir les défauts à corriger.
(formatage notamment) (et donc, mauvaise recevabilité chez le client)
- il n'y a pas de protection suffisante sur au moins le champs $_POST["email"].
A priori, je peux mettre 50 adresses mails + de l'injection de code pour spammer.

Dans les logs PHP, vois-tu des erreurs lorsque tu envoies un mail via le formulaire ?

frank69
28/02/2016, 00h06
Salut Gaston,
merci pour ton aide.
J'ai checké ça marche bien sur OVH. Je me suis trompé, le site qui cause problème (c'est le même script que celui que j'ai sur OVH et qui fonctionne bien) est sur 1&1.
Je crois que 1&1 me fait payer un supplément pour rester sur une version de PHP plus ancienne.
Est-ce que le script que j'ai mis ci-dessus peut fonctionner sur la dernière version de PHP ? Car sinon, je vais avoir de gros souci d'ici peu :S !!

Sais-tu si sur 1&1 il y a eu du changement récemment ?

Gaston_Phone
27/02/2016, 23h58
Essaie ce test -> http://www.wordetweb.com/word-et-web...ipt-php-FR.htm

frank69
27/02/2016, 23h55
Bonjour,

j'utilise un script depuis plusieurs années qui me permet, lorsqu'une personne commande sur mon site, de lui envoyer à lui un email de confirmation avec les détails de sa commande et à moi également (le même émail est envoyé à moi & au client).

J'ai bien reçu des emails de clients par ce biais le 26 février. Mon script existe et fonctionne (la plupart du temps) depuis plus d'un an.
Malheureusement j'ai fait un test aujourd'hui et l'envoi du mail ne fonctionne pas.

Voici le code (je ne suis pas développeur, j'avais fait appelle à un freelance quand j'ai lancé mon site):

Code PHP:
/* Send email */
    
$headers "MIME-Version: 1.0\n";
    
$headers .= 'Content-type: text/html; charset=iso-8859-1' "\r\n";
    
$headers .= 'From: '.htmlspecialchars($_POST["email"]).'' "\r\n" .
    
$subject 'Confirmation de commande';    
    
    
$destinataires $email.",monmail@gmail.com";
    
    
    
$message '
      
        Date commande
        '
.date("d-m-Y").'
      
      
        Nom et Prénom *
        '
.$_POST['nom'].'
      
      
        Adresse
        '
.$_POST['adresse1'].'
      
      
        *********************
        '
.$_POST['adresse2'].'
      
      
        ********************* *
        '
.$_POST['code_postal'].' - '.$_POST['ville'].'
      
      
        *********************
        '
.$_POST['pays'].'
        
      
      
        *********************
        '
.$_POST['tel'].'
      
      
        Adresse email
        '
.$_POST['email'].'
      '
;
     
         if(!empty(
$_POST['consignes'])){
             
$message.='
                *********************
                '
.$_POST['consignes'].'
              '
;
         }
      
      
$message.='le message';

    if(
mail($destinataires$subject$message$headers)){
        
    }else{
        echo 
"pas good";
    }
    ;
    
    
    
mysql_close();
?> 
Malheureusement, ça affiche "pas good" en haut à gauche de mon site et je ne reçois pas l'email.

Est-ce qu'il y a quelque chose qui a changé chez OVH pour que ça ne fonctionne plus ?
Je n'ai pas touché à ce code depuis des mois & ça fonctionnait bien avant, je ne comprends vraiment pas d'où ça peut venir.



EDIT: Même chose avec mon formulaire de contact, celui-ci ne fonctionne plus :'S

Voici le code du formulaire (qui se divise en 2 pages) :

Pages avec les champs du formulaire :
Code PHP:


                                                        
                                                          Nom et Prénom *
                                                          
                                                        
                                                        
                                                      
                                                        
                                                            Votre adresse *

                                                                                                                             
                                                        
                                                        
                                                      
                                                        
                                                            Code postal et Ville *

                                                                                                                              
                                                        
                                                        
                                                      
                                                        
                                                            Téléphone


                                                                
                                                        
                                                        
                                                      
                                                        
                                                            E-mail *

                                                                                                                                    
                                                        
                                                        
                                                      
                                                        
                                                            Objet de votre e-mail *

                                                                                                                                    
                                                        
                                                        
                                                        
                                                            Votre message *
                                                              


                                                              
                                                          


                                                        
                                                        
                                                            
Recopiez ce code de sécurité *
                                                            
                                                                                        

                                                            
                                                                
                                                                    echo md5(uniqid(time())); ?>" style="border:0px" height="35" width="100" />                                                                

                                                                
                                                                        
                                                                
                                                            
                                                        
                                                        
                                                            

                                                            
                                                        
                                                        
                                                            * champs obligatoires
                                                        
                                                    
                                              
                                            
                                                //pour valider les champs
                                                 var frmvalidator = new Validator("formulaire");
                                                 frmvalidator.addValidation("nom","req","Veuillez saisir votre nom et prénom");
                                                 frmvalidator.addValidation("adresse","req","Veuillez saisir votre adresse");
                                                 frmvalidator.addValidation("code_postal","req","Veuillez saisir votre code postal");
                                                 frmvalidator.addValidation("code_postal","numeric","Veuillez saisir un code postal valide");
                                                 frmvalidator.addValidation("ville","req","Veuillez saisir votre ville");
                                                 frmvalidator.addValidation("email","req","Veuillez saisir votre email");
                                                 frmvalidator.addValidation("email","email","Veuillez saisir une adresse email valide");
                                                 frmvalidator.addValidation("objet","req","Veuillez saisir l'objet de votre message");
                                                 frmvalidator.addValidation("message","req","Veuillez saisir votre message");
                                                 frmvalidator.addValidation("secure_code","req","Veuillez saisir le code de sécurité");
                                                
                                              
                                                Veuillez expédier vos cassettes à notre adresse :
                                                
                                                  
Et la page de destination :

Code PHP:
                          if(isset($_POST["envoyer"])){
                                include(
"securimage/securimage.php");
                                
$img = new Securimage();
                                
$valid $img->check($_POST['secure_code']);
                                if(
$valid == true) {

                                    
//envoi de mail au responsable
                                    
$message='
                                      Nom & prénom : '
.htmlspecialchars($_POST["nom"]).'

                                      Adresse : '.htmlspecialchars($_POST["adresse"]).'

                                      Code postal & ville : '.htmlspecialchars($_POST["code_postal"]).'-'.htmlspecialchars($_POST["ville"]).'
                                      Téléphone : '
.htmlspecialchars($_POST["tel"]).'
                                      Email : '
.htmlspecialchars($_POST["email"]).'
                                      Objet du message : '
.htmlspecialchars($_POST["objet"]).'
                                      Message : '
.htmlspecialchars($_POST["message"]).'
                                      '
;

                                        
$headers "MIME-Version: 1.0\n";
                                        
$headers .= 'Content-type: text/html; charset=UTF-8' "\r\n";
                                        
$headers .= 'From: '.htmlspecialchars($_POST["email"]).'' "\r\n" .
                                        
$subject 'Nouveau message';

                                        
$destinataire 'monmail@gmail.com';

                                        
//$message="Test";
                                        
if(mail($destinataire$subject$message$headers) ) {
                                            echo
"

Votre email a été envoyé avec succès. Nous vous remercions d'avoir rempli ce formulaire et de la confiance que vous nous accordez. Votre demande est en cours de traitement, nous vous répondrons dans les meilleurs délais.

"
;
                                         }else {
                                           echo 
"

Le message n'a pu être envoyé. Nous vous demandons de réessayer plus tard.

"
;
                                        }
                                } else {
                                     echo 
"

Le code que vous avez saisi est invalide. :history.go(-1)\">Essayer à nouveau.

"
;
                                }
                          }
                        
?>
Donc le problème c'est que j'ai le message suivant quand je test le formulaire : "Le message n'a pu être envoyé. Nous vous demandons de réessayer plus tard.".

Aidez-moi SVP, merci beaucoup.