8795 sujets

Développement web côté serveur, CMS

Bonjour à tous,

J'ai une petite question à vous poser, en fait :


<param name="gui" value="securite/fichier.xml">



Si mon "fichier.xml" se trouve dans un dossier sous .htaccess "deny from all", le param ne marche plus.

Avez vous une solution qui me permettrais de protéger ce fichier.xml tout en pouvant l'utiliser ?

Je vous remercie d'avance Smiley smile
Le seul moyen est de l'inclure dans ton script (en php require() ou include() ) , s'il est appelé en _GET ca ne marchera pas
Et bien dans ce cas pas moyen.

A priori il sagit d'une api ou d'un objet flash non ?

C'est donc le client qui fait la requete sur le fichier , tu ne peux donc pas a la fois laisser le client accéder au fichier dans le cadre de ton flash ( ou autre ) et empecher un accès direct .


Si tu as vraiment besoin de rendre ce fichier inaccessible tu dois ruser .
En créeant par exemple un lien symbolique vers le fichier à l'éxécution de ton script .
Ensuite tu gère les requetes vers ce fichier par l'intermédiaire d'un autre fichier php qui servira le fichier en question puis détruira le lien symbolique.
Dans ton script tu créer un lien symbolique vers le fichier xml ( qui lui est placé dans un répertoire non accéssible par le web par exemple ), ce lien symbolique est lui placé ou tu veux .


biensur tu donne un autre nom au lien symbolique , pourquoi pas codé en md5 par exemple .

$file = '/chemin/du/fichier/config.xml';

$sym_link_name = md5(uniqid());


symlink($file,'/chemin/ou/est/créer/le/lien/'.$sym_link_name);



ensuite dans ton code "html"

<param name="gui" value="load_config.php?f=<?php echo $sym_link_name ;?>">


ensuite tu créer le petit script qui fera le relais (load_config.php).

exemple :
<?php
 $path = '/chemin/ou/est/créer/le/lien/';
 
 // nom du fichier récupérer en mode $_GET
 $file = $_GET['f];

 // récupération du contenu du fichier
 $fc = file_get_contents($path.$file);

 // efface le lien symbolique
 unlink($path.$file);

 // renvoie le contenu du fichier
 header('Content-Type: text/xml; charset=utf-8');
 echo $fc;
 exit();
?>

attention ce bout de code n'est pas du tout sécurisé , il faut y appliquer les règles d'usage lorsque l'on traitre des données utilsateurs.

pour etre plus éfficace il faudrait ajouter à ca des controles de sessions ou de cookies par exemple .


Maintenant il faut savoir que ca empechera un accès direct au fichier, mais pas d'en voir le contenu.
Car en regardant le resultats des requetes effectué par le navigateur ( via firebug par exemple ) on en verra la contenu !

si tu ne veux pas qu'on puisse lire le contenu il faut crypter les données.
Modifié par PeterPetrelli (26 Jun 2007 - 14:03)
Ah d'accord, j'avais pas vu ça comme ça !

Je vais essayer cette technique, merci en tout cas pour votre aide.

:)