magik_tonton
Messages postés4Date d'inscriptionlundi 20 juin 2005StatutMembreDernière intervention 6 février 2011
-
1 août 2006 à 02:22
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 2010
-
1 août 2006 à 14:28
Salut à tous !
J'ai un petit soucis concernant la sécurisation des informations $_POST, je vous explique le topo :
Je récupère des variables provenant d'une application en Flash, ce sont des $_POST qui sont injectés dans un page en PHP, j'aimerais faire en sorte de sécurisé ces variable pour qu'elle ne puisse pas être injectés à partir d'un formulaire stocké en local chez une personne malveillante par exemple
Pour cela j'ai à deux choses :
D'abord à une vérification que la page d'ou provient les variable vient bien du site, à l'aide du Referer à l'aide de la variable $HTTP_REFERER, mais celle ci ne fonctionne que sur Firefox dans mon cas ...
Puis aussi aux sessions, avec une valeur que je rensigne sur la page de l'application en Flash, que je vérifis ensuite dans la page où doivent être traités les $_POST, mais cette solution comporte une faille : la personne n'a simplement qu'a aller sur la page de l'application en flash pour que la session soit rensigner et executer un formulaire en local pour injecter des variable non autorisé ...
J'espère que j'ai expliqué le problème, si vous avez des solutions je suis preneur !
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 1 août 2006 à 02:35
La meilleur solution est le système dit du ticket... tu créer un id unique genre
md5(uniqid(
rand(), true
).$_SERVER['DOCUMENT_ROOT'])
tu stocke ce ticket dans la session et dans un champs caché de ton formulaire (par exemple) à la réception des données tu compare... .. .
C'est une bonne technique mais qui n'est pas sans failles... par exemple comme tu l'as dis si la personne ouvre en parallèle une page sur ton site... ça ne dispense donc pas de controler les données soumises... .. .
magik_tonton
Messages postés4Date d'inscriptionlundi 20 juin 2005StatutMembreDernière intervention 6 février 2011 1 août 2006 à 03:23
Merci pour ta réponse, ta technique est sympa, mais elle revient un peu au même que ma session comme tu le disais, je vais voir si d'autres personnes n'ont pas d'autres solutions ;)
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 1 août 2006 à 14:26
Hello,
tu as essayé de poster vers ta page à partir d'un serveur distinct? Une configuration Apache permet d'interdire d'accepter ces post distants.
De plus, je ne pige pas un truc : si le mec lance ton application flash, celle-ci va poster. Avant lui. Donc, un système de ticket reprenant le principe des instants gagnants devrait fonctionner :
l'appli flash est lancée. Elle vérifie que le champ PROCESS soit à 0. Si oui, Elle ouvre un Instant dans une base :
PROCESS = 1
Elle poste.
La page php vérifie si PROCESS est à 1 dans ta base. Si oui, elle le fout à 0, et procède. Sinon, elle ne fait rien (ou logue une erreur...).
A priori, à moins que le mec ne soit très rapide...y a peu de risque.
Evidemment, la mise à 1 du champ PROCESS ne doit se faire que juste avant que ton appli flash ne fasse son post.
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 1 août 2006 à 14:28
Tu peux même, toujours sur le principe des instants gagnants, sécuriser encore plus, en laissant un temps d'ouverture possible minimal : 1 seconde par exemple (ou un peu plus pour laisser le temps au POST de passer).
Bref, tu fous à 1 et tu stocke le timestamp.
Ta page PHP vérifie que PROCESS soit à 1 et que letimestamp courant ne soit pas supérieur au timestamp stocké + n secondes (n étant ton delta max). Sinon, elle ferme l'Instant.