Les Allergies
Alimentaires
Posez votre question Signaler

Register globals sur off & formulaires [Résolu]

webmc 23Messages postés 14 juillet 2007Date d'inscription 13 août 2010Dernière intervention - Dernière réponse le 1 mars 2009 à 17:08
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>";  

Lire la suite 

Register globals sur off & formulaires »

7 réponses
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+1
moins plus
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
webmc- 28 févr. 2009 à 21:30
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>";  
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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é. @+
Ajouter un commentaire
Réponse
+0
moins plus
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
webmc- 1 mars 2009 à 17:08
Merci pour l'approfondissement et la clarté des conseils... bien sûr, adoptés :) !
Ajouter un commentaire
Ce document intitulé « Register globals sur off & formulaires » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?