Register globals sur off & formulaires
Résolu
webmc
Messages postés
24
Statut
Membre
-
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 !
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
-
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 -
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-
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'> </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'> </td> </tr> <tr> <td colspan='2'>$messager $detailr</td> </tr> <tr> <td colspan='2'> </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>";
-
-
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 -
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é. @+
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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