Register globals sur off & formulaires

Résolu
webmc Messages postés 24 Statut Membre -  
webmc Messages postés 24 Statut Membre -
Bonjour,

J'essaie progressivement de sécuriser un site hébergé sur un 240 plan d'OVH. Et, dès le départ ça coince... à cause de SetEnv REGISTER_GLOBALS 0 présent sur mon fichier .htaccess : les formulaires ne fonctionnent plus

J'ai recherché sur le net et vu qu'il faut utiliser $var = $_POST[var]... mais j'ai du mal à comprendre comment il faut exactement s'y prendre ? Alors, si vous pouvez m'aider à adapter le résumé du code ci-dessous... ça serait cool :)

Merci d'avance !

$to = "mail@domaine.fr"; 
$from = "mail@domaine.fr"; 
$headers  = "MIME-Version: 1.0 \n";  
$headers .= "Content-type: text/html; charset=iso-8859-1 \n";  
$headers .= "From: $from  \n";  
$headers .= "Reply-to: $email\n"; 
$headers .= "Return-Path: <$to>\n"; 

$sujet = "$objet \n"; 

$redirection = "fichier.php"; 
$url_redir = "$redirection";  
$mailheaders = "Reply-To: $email\n\n"; 
$msg = " $message\r ";  

mail($to,$sujet,$msg,$headers); 

echo "<script language=\"javascript\">"; 
echo "window.location=('$url_redir');"; 
echo "</script>";  
echo "$reponse"; 
echo "</BODY></HTML>";  

Configuration: Windows XP
Internet Explorer 7.0

5 réponses

  1. jmg78
     
    c est incomplet il vaut mieux mettre le lien
    il faut savoir si ton formulaire est en POST ou en GET
    tu mets extract($_POST) ou $_GET
    et tu peux utiliser tes variables telles que définies dans le formulaire
    1
  2. Alain_42 Messages postés 5413 Statut Membre 904
     
    extract résoud le pb mais cela veut dire que tu prend comme variable n'importe quel champ posté, comme qd REGISTER_GLOBAL est à 1

    si tu veux mieux maitriser, donc sécuriser, il faut faire tous les champs un par un:

    $champ1=$_POST['champ1'];
    $champ2=$_POST['champ2'];
    etc..

    ainsi ne seront pris en compte que ceux réellement utiles à ton script
    1
    1. webmc Messages postés 24 Statut Membre 8
       
      Merci alain_42 pour cette mise en garde,
      Je crois avoir enfin compris ce qu'il faut faire, voici donc le code modifié qui fonctionne correctement... cela servira peut-être aux personnes aussi perspicaces que moi
      Si ce n'est toujours pas optimal... merci aux pros d'intervenir
      @+

      $objet=$_POST['objet']; 
      $articles=$_POST['articles']; 
      $societe=$_POST['societe']; 
      $contact=$_POST['contact']; 
      $telephone=$_POST['telephone']; 
      $email=$_POST['email'];  
      $message=$_POST['message'];  
      $detail=$_POST['detail'];  
      
      $to = "mail@domaine.fr"; 
      $from = "mail@domaine.fr"; 
      $headers  = "MIME-Version: 1.0 \n";  
      $headers .= "Content-type: text/html; charset=iso-8859-1 \n";  
      $headers .= "From: $from  \n";  
      $headers .= "Reply-to: $email\n"; 
      
      $sujet = "$objet \n"; 
      
      $redirection = "fichier.php"; 
      $url_redir = "$redirection";  
      $msg = 
      
      <table width='600'>
        <tr>
          <td colspan='2'><img src='fichier.jpg'></td>
        </tr>
        <tr>
          <td colspan='2'>&nbsp;</td>
        </tr>
        <tr>
          <td>Objet</td>
          <td>$objet$articles</td>
        </tr>
        <tr>
          <td width='100'>Societe</td>
          <td width='400'>$societer</td>
        </tr>
        <tr>
          <td width='100'>Contact</td>
          <td width='400'>$contactr</td>
        </tr>
        <tr>
          <td width='100'>Tel</td>
          <td width='400'>$telephoner</td>
        </tr>
        <tr>
          <td width='100'>E-Mail</td>
          <td width='400'>$emailr</td>
        </tr>
        <tr>
          <td colspan='2'>&nbsp;</td>
        </tr>
        <tr>
          <td colspan='2'>$messager $detailr</td>
        </tr>
        <tr>
          <td colspan='2'>&nbsp;</td>
        </tr>
        <tr>
          <td colspan='2'><img src='fichier.jpg'></td>
        </tr>
      </table>
      "; 
      
      mail($to,$sujet,$msg,$headers); 
      
      echo "<script language="javascript\">"; 
      echo "window.location=('$url_redir');"; 
      echo "</script>";  
      echo "</BODY></HTML>";  
      
      0
  3. Alain_42 Messages postés 5413 Statut Membre 904
     
    C'est simple:

    - si REGISTER_GLOBAL est à 1:

    si dans ton formulaire en methode="post" tu as par exemple un champ

    <input type=text" name="nom">

    dans le script de traitement du formulaire tu récupères la valeur saisie par
    $nom (le nom du champ précédé de $)

    si REGISTER_GLOBAL est à 0

    dans le script de traitement du formulaire tu récupères la valeur saisie par
    $_POST['nom']

    la deuxième solution est sécurisée, tu peux mieux controler ce que tu dois récupérer
    0
  4. webmc Messages postés 24 Statut Membre 8
     
    Merci alain-42 pour tes précisions et jmg78 pour ta solution que je viens d'adopter... Car, je viens d'ajouter en première ligne de mon fichier php : extract($_POST); avec REGISTER_GLOBALS sur OFF et tout fonctionne bien à nouveau ... J'espère que cette méthode ne change en rien les règles de sécurité. @+
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Alain_42 Messages postés 5413 Statut Membre 904
     
    et si on veut aller plus loin on peut protéger les saisies par htmlentities

    $objet=htmlentities($_POST['objet']); 
    $articles=htmlentities($_POST['articles']); 
    $societe=htmlentities($_POST['societe']); 
    $contact=htmlentities($_POST['contact']); 
    $telephone=htmlentities($_POST['telephone']); 
    $email=htmlentities($_POST['email']);  
    $message=htmlentities($_POST['message']);  
    $detail=htmlentities($_POST['detail']);  
    
    


    et si dans une des saisies tu as une apostrophe (ex: l'avion) , dans le mail tu vas avoir l\'avion

    pour éviter ça tu passe en plus par la fonction stripslashes

    $message=stripslashes(htmlentities($_POST['message']));

    idem pour tous les champs susceptibles d'en comporter
    0
    1. webmc Messages postés 24 Statut Membre 8
       
      Merci pour l'approfondissement et la clarté des conseils... bien sûr, adoptés :) !
      0