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>";  

A voir également:

5 réponses

Utilisateur anonyme
 
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
Alain_42 Messages postés 5413 Statut Membre 894
 
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
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
Alain_42 Messages postés 5413 Statut Membre 894
 
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
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

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

Posez votre question
Alain_42 Messages postés 5413 Statut Membre 894
 
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
webmc Messages postés 24 Statut Membre 8
 
Merci pour l'approfondissement et la clarté des conseils... bien sûr, adoptés :) !
0