Sécuriser $_POST injecté sur un page PHP

magik_tonton Messages postés 4 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 6 février 2011 - 1 août 2006 à 02:22
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Derniè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 !

Merci d'avance à tous ;)

4 réponses

kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 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... .. .

@ tchaOo°

l'homme est un loup pour l'homme... .. .
0
magik_tonton Messages postés 4 Date d'inscription lundi 20 juin 2005 Statut Membre Derniè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 ;)
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
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.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
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.
0