[php] origine de variables
Résolu/Fermé
gryzzly
Messages postés
4608
Date d'inscription
lundi 7 novembre 2005
Statut
Contributeur
Dernière intervention
24 octobre 2020
-
6 oct. 2007 à 21:49
grilladou Messages postés 1 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 7 mars 2008 - 7 mars 2008 à 23:36
grilladou Messages postés 1 Date d'inscription dimanche 10 août 2003 Statut Membre Dernière intervention 7 mars 2008 - 7 mars 2008 à 23:36
Salut,
'tite question. Concernant la sécurité et plus particulièrement sur l'origine de variables à traiter. Je m'explique :
Supposons que j'ai un formulaire qui utilise la méthode POST, et transmet les variables à action.php , le tout étant hébergé sur le serveur SERVER_PERSO
En toute rigueur, il est possible à n'importe qui de de créer un formulaire utilisant la methode POST, hébergé sur SERVER_PIRATE, qui transmet les variables à SERVER_PERSO/action.php
Le problème, c'est que cette personne pourrait envoyer des choses non attendues sur mon SERVER_PERSO.
Quels sont nos moyens pour vérifier que toutes les variables transmises et traitées par action.php proviennent de SERVER_PERSO ?
'tite question. Concernant la sécurité et plus particulièrement sur l'origine de variables à traiter. Je m'explique :
Supposons que j'ai un formulaire qui utilise la méthode POST, et transmet les variables à action.php , le tout étant hébergé sur le serveur SERVER_PERSO
En toute rigueur, il est possible à n'importe qui de de créer un formulaire utilisant la methode POST, hébergé sur SERVER_PIRATE, qui transmet les variables à SERVER_PERSO/action.php
Le problème, c'est que cette personne pourrait envoyer des choses non attendues sur mon SERVER_PERSO.
Quels sont nos moyens pour vérifier que toutes les variables transmises et traitées par action.php proviennent de SERVER_PERSO ?
A voir également:
- [php] origine de variables
- Ublock origine - Télécharger - Outils pour navigateurs
- Easy php - Télécharger - Divers Web & Internet
- Remettre les couleurs d'origine android - Forum Windows 7
- Retrouver réglages couleurs d'origine de mon écran W10 ✓ - Forum Windows 10
- Remettre les couleurs d'origine de l'écran ✓ - Forum Windows 10
9 réponses
PhP
Messages postés
1770
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
23 décembre 2009
606
8 oct. 2007 à 22:49
8 oct. 2007 à 22:49
Bonsoir
ha Ok, si tu veux t'assurer que l'appel de ta page action.php provient bien du navigateur d'un client qui a charger ta page SERVER_PERSO/form.html et non pas SERVER_PIRATE/form.html alors un moyen simple est d'utiliser les sessions et notemment le SID.
Ex : le formulaire sur le site PERSO
le formulaire sur le site PIRATE : quasi identique ... ou presque et pourtant
la page action.php
voilà c'était juste une idée
ha Ok, si tu veux t'assurer que l'appel de ta page action.php provient bien du navigateur d'un client qui a charger ta page SERVER_PERSO/form.html et non pas SERVER_PIRATE/form.html alors un moyen simple est d'utiliser les sessions et notemment le SID.
Ex : le formulaire sur le site PERSO
<?php if (!isset($_SESSION)) { session_start(); // Restaure la session précédente ou démarre ou nouvelle session } ?> <html> <title>Formulaire du serveur PERSO</title> <body> <form action="action.php" method="post"> Variable A <input type="text" value="" name="variable_a" id="variable_a"><br/> <input type="hidden" value="<?php echo session_id();?>" name="id"> <input type="submit" value="Envoyer"> </form> </form> </body> </html>
le formulaire sur le site PIRATE : quasi identique ... ou presque et pourtant
<?php if (!isset($_SESSION)) { session_start(); // Restaure la session précédente ou démarre ou nouvelle session } ?> <html> <title>Formulaire du serveur PIRATE</title> <body> <form action="http://site_perso/.../action.php" method="post"> Variable A <input type="text" value="" name="variable_a" id="variable_a"><br/> <input type="hidden" value="le pirate ne peut pas connaître le SID" name="id"> <input type="submit" value="Envoyer"> </form> </form> </body> </html>
la page action.php
<?php // On restaure la session pour l'utilisateur if (!isset($_SESSION)) { session_start(); // Restaure la session précédente ou démarre ou nouvelle session } ?> <html> <body> <?php $id=""; // On récupère l'ID posté par l'utilisateur if (isset($_POST['id'])) $id=$_POST['id']; // On teste si l'ID correspond au SID if (session_id() != $id) { echo "Hum ! Votre session a expiré ou appel depuis une page non autorisée !"; } else { echo "Cette page a bien été appellée depuis une page autorisée du même site. Cool<br>"; $variable_a = isset($_POST['variable_a']) ? $_POST['variable_a'] : ""; echo "variable_a = ".$variable_a; } ?> </body> </html>
voilà c'était juste une idée
Dalida
Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016
922
6 oct. 2007 à 23:22
6 oct. 2007 à 23:22
salut Gryzzly !
ce que tu cherches c'est sans doute 'HTTP_REFERER' :
mais comme tu vois ce n'est pas le top.
mais en validant le contenu de ton '$_POST', en premier avec le type de variable retourné tu devrais faire mieux.
ce que tu cherches c'est sans doute 'HTTP_REFERER' :
'HTTP_REFERER' L'adresse de la page (si elle existe) qui a conduit le client à la page courante. Cette valeur est affectée par le client, et tous les clients ne le font pas. Certains navigateurs permettent même de modifier la valeur de HTTP_REFERER, sous forme de fonctionnalité. En bref, ce n'est pas une valeur de confiance.
mais comme tu vois ce n'est pas le top.
mais en validant le contenu de ton '$_POST', en premier avec le type de variable retourné tu devrais faire mieux.
gryzzly
Messages postés
4608
Date d'inscription
lundi 7 novembre 2005
Statut
Contributeur
Dernière intervention
24 octobre 2020
1 335
6 oct. 2007 à 23:27
6 oct. 2007 à 23:27
"mais en validant le contenu de ton '$_POST', en premier avec le type de variable retourné tu devrais faire mieux"
tu veux dire quoi par là ?
tu veux dire quoi par là ?
PhP
Messages postés
1770
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
23 décembre 2009
606
8 oct. 2007 à 10:12
8 oct. 2007 à 10:12
Bonjour
Sinon tu peux forcer l'identification avec nom d'utilisateur + mot de passe lors de l'accès à ta page :
Voir : http://fr3.php.net/manual/fr/features.http-auth.php
Tu peux gérer une liste d'utilisateurs en "dur" dans le fichier php (pas terrible, pas très sécurisé), dans un fichier sur ton serveur ou une base MySQL.
Sinon si tu utilises Apache et que tu as accès au serveur tu peux également gérer la sécurité au travers des fichiers .htaccess
apacht
Sinon tu peux forcer l'identification avec nom d'utilisateur + mot de passe lors de l'accès à ta page :
Voir : http://fr3.php.net/manual/fr/features.http-auth.php
Tu peux gérer une liste d'utilisateurs en "dur" dans le fichier php (pas terrible, pas très sécurisé), dans un fichier sur ton serveur ou une base MySQL.
Sinon si tu utilises Apache et que tu as accès au serveur tu peux également gérer la sécurité au travers des fichiers .htaccess
apacht
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
gryzzly
Messages postés
4608
Date d'inscription
lundi 7 novembre 2005
Statut
Contributeur
Dernière intervention
24 octobre 2020
1 335
8 oct. 2007 à 10:27
8 oct. 2007 à 10:27
Salut,
Je ne demande aucnement le moyen de protéger une page ou une transaction par login+mdp.
Je demande un moyen de vérifier que l'origine d'une trnasmission provient bien de mon serveur et non pas d'un serveur externe.
Je ne demande aucnement le moyen de protéger une page ou une transaction par login+mdp.
Je demande un moyen de vérifier que l'origine d'une trnasmission provient bien de mon serveur et non pas d'un serveur externe.
Dalida
Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016
922
8 oct. 2007 à 14:08
8 oct. 2007 à 14:08
salut,
il s'agit juste de vérifier que ce que te renvoie le '$_POST' est un 'String' quand tu attends un 'String' ou un entier quand tu attends un entier.
dans ton cas ce n'est pas forcement suffisant, c'est très utile pour les types autres que les chaines.
et si tu te mets à l'objet c'est une excellente habitude de typer les variables de tes fonctions.
mais je me demande si ce que tu veux sécuriser est encore utile. je vais chercher mais avec PHP5 il me semble que par défaut l'exécution de scripts hors domaine est interdit par défaut.
je vais regarder 'php.ini' quand j'aurais un peu plus de temps.
il s'agit juste de vérifier que ce que te renvoie le '$_POST' est un 'String' quand tu attends un 'String' ou un entier quand tu attends un entier.
dans ton cas ce n'est pas forcement suffisant, c'est très utile pour les types autres que les chaines.
et si tu te mets à l'objet c'est une excellente habitude de typer les variables de tes fonctions.
mais je me demande si ce que tu veux sécuriser est encore utile. je vais chercher mais avec PHP5 il me semble que par défaut l'exécution de scripts hors domaine est interdit par défaut.
je vais regarder 'php.ini' quand j'aurais un peu plus de temps.
gryzzly
Messages postés
4608
Date d'inscription
lundi 7 novembre 2005
Statut
Contributeur
Dernière intervention
24 octobre 2020
1 335
8 oct. 2007 à 14:20
8 oct. 2007 à 14:20
Salut,
"il s'agit juste de vérifier que ce que te renvoie le '$_POST' est un 'String' quand tu attends un 'String' ou un entier quand tu attends un entier."
ah oui, ca d'accord... mais ce n'est qu'un traitement après réception des données. là, la question porte sur l'étape d'avant : la réception des données en elle meme
la page perso SERVER_PERSO/form.html appelle le script dans le domaine (il appelle ma page action.php), c'est le contenu des variables qui peut provenir d'un autre domaine : SERVER_PIRATE/form.html qui transmet aussi à action.php.
de ce que tu me dis "execution de scripts hors domaine" signifierais que c'est le pirate qui ne peux plus envoyer à mon serveur, et non pas l'inverse, moi qui ne pourrait pas recevoir d'un autre domaine.
or nous savons tout deux que la portabilité est une chose essentielle ;-) et que l'on n'a pas toujorus la main sur tout, en particulier la config du php.ini . il faut donc prévoir en amont les problèmes que l'on pourrait rencontrer lors d'une déportatation sur un serveur configuré différemment ;-)
"il s'agit juste de vérifier que ce que te renvoie le '$_POST' est un 'String' quand tu attends un 'String' ou un entier quand tu attends un entier."
ah oui, ca d'accord... mais ce n'est qu'un traitement après réception des données. là, la question porte sur l'étape d'avant : la réception des données en elle meme
la page perso SERVER_PERSO/form.html appelle le script dans le domaine (il appelle ma page action.php), c'est le contenu des variables qui peut provenir d'un autre domaine : SERVER_PIRATE/form.html qui transmet aussi à action.php.
de ce que tu me dis "execution de scripts hors domaine" signifierais que c'est le pirate qui ne peux plus envoyer à mon serveur, et non pas l'inverse, moi qui ne pourrait pas recevoir d'un autre domaine.
or nous savons tout deux que la portabilité est une chose essentielle ;-) et que l'on n'a pas toujorus la main sur tout, en particulier la config du php.ini . il faut donc prévoir en amont les problèmes que l'on pourrait rencontrer lors d'une déportatation sur un serveur configuré différemment ;-)
gryzzly
Messages postés
4608
Date d'inscription
lundi 7 novembre 2005
Statut
Contributeur
Dernière intervention
24 octobre 2020
1 335
8 oct. 2007 à 23:18
8 oct. 2007 à 23:18
Ca me plait. Elle est bonne et me convient. Je l'adopte.
momentanément du moins, car je n'en ai pas l'utilité immédiate. Je me posait cette question suite à une lecture d'un très bon bouquin, mais comme tout bon bouquin, il n'adopte pas le meme schéma reflectionnel que ma cervelle et donc n'abordait pas cette aspect au moment ou mon imagination divaguait ;-)
Merci de cette contrib
momentanément du moins, car je n'en ai pas l'utilité immédiate. Je me posait cette question suite à une lecture d'un très bon bouquin, mais comme tout bon bouquin, il n'adopte pas le meme schéma reflectionnel que ma cervelle et donc n'abordait pas cette aspect au moment ou mon imagination divaguait ;-)
Merci de cette contrib
grilladou
Messages postés
1
Date d'inscription
dimanche 10 août 2003
Statut
Membre
Dernière intervention
7 mars 2008
7 mars 2008 à 23:36
7 mars 2008 à 23:36
Salut à tous
Je confirme que la méthode de PhP fonctionne parfaitement bien. Un grand merci pour ta contribution.
A+
Je confirme que la méthode de PhP fonctionne parfaitement bien. Un grand merci pour ta contribution.
A+