Problème de sécurité des données

Problème de sécurité des données - PHP - Programmation

Marsh Posté le 28-02-2007 à 22:11:40    

Bonjour,
 
Dans le cadre d'un projet d'étude pour mon école, je suis en train de faire un site de téléchargement payant de "fichiers" (disons des mp3). Ce système de paiement passe par Allopass, système de paiement à l'acte bien connu.
 
Je rappelle rapidement le principe : l'utilisateur appelle un numéro et reçoit un code qu'il doit entrer dans un formulaire pour avoir accès au fichier protégé.
 
Le problème est que ce fichier est accessible dès qu'on connaît l'URL qui y mène. (un coup de FlashGet et c'est reglé ). De plus si j'interdis l'accès aux répertoires contenant mes MP3 payants, l'interdiction s'appliquera également quand on rentre un code d'accès...
 
Le site d'allopass conseille pour sécuriser ses "pages" d'utiliser les sessions en PHP. Le problème c'est que ça marche lorsqu'on veut sécuriser le contenu d'une page web, mais comment faire lorsqu'il s'agit de fichiers tels que des MP3 ?
 
J'espère que je suis clair, sinon n'hésitez pas à me reprendre.
 
Merci d'avance pour vos lumières.

Reply

Marsh Posté le 28-02-2007 à 22:11:40   

Reply

Marsh Posté le 28-02-2007 à 22:14:48    

1. Une page qui vérifie le code allopass, crée une var de session le_code_fourni_est_bon et propose un lien telecharge.php?id=iddump3
2. ta page telecharge.php vérifie le contenu de la session et si c'est tout bon, envoie le fichier avec les headers qui vont bien...
 
Voila

Reply

Marsh Posté le 28-02-2007 à 22:37:41    

Oui mais comment empêcher le gars de choper les fichiers directement en tappant le nom de l'url genre "http://monsite/monfichier.mp3" ?
 
C'est ça mon problème, le code pour le système de téléchargement par allopass je l'ai déjà...

Reply

Marsh Posté le 28-02-2007 à 22:46:08    

Parce que le gars il la voit pas cette url, ton script seul la voit... Et par ailleurs tu protèges le répertoire de tes mp3 avec htaccess pour que seul ton script puisse lire dans le rep...

Reply

Marsh Posté le 28-02-2007 à 23:05:00    

gooopil a écrit :

Et par ailleurs tu protèges le répertoire de tes mp3 avec htaccess pour que seul ton script puisse lire dans le rep...


 
Si c'est possible, c'est effectivement ce que j'aimerais faire, mais comment ?
 
(je sais juste interdire ou restreindre avec mot de passe mais je ne savais pas qu'on pouvait faire en sorte que l'accès au répertoire ne puisse se faire qu'à travers un script)


Message édité par Da KJ le 28-02-2007 à 23:06:08
Reply

Marsh Posté le 28-02-2007 à 23:28:49    

T'as les pistes, un petit coup de google maintenant, ça peut pas faire de mal...

Reply

Marsh Posté le 01-03-2007 à 00:57:12    

Déjà, merci pour les pistes.
 
J'ai cherché et j'ai trouvé qu'on pouvait limiter l'accès aux protocoles GET et POST, mais je ne vois pas comment limiter l'accès à un script... :/

Reply

Marsh Posté le 01-03-2007 à 01:05:11    

Salut,
 
le script ne passe pas par HTTP pour accéder aux données, le htaccess n'aura donc aucune influence sur lui.
 
a +

Reply

Marsh Posté le 01-03-2007 à 01:18:49    

ben apparament si puisqu'avec un htaccess avec "deny from all" lorsque je passe par le script il me met un Forbidden. :/


Message édité par Da KJ le 01-03-2007 à 01:19:24
Reply

Marsh Posté le 01-03-2007 à 01:28:24    

bah ton script passe par HTTP pour faire ses actions dans ce cas ;)
 
Un script avec un fopen local ne sera pas gêné par un htaccess.

Reply

Marsh Posté le 01-03-2007 à 01:28:24   

Reply

Marsh Posté le 01-03-2007 à 13:10:44    

Bonjour, merci j'ai un peu avancé.
 
J'utilise maintenant le téléchargement à l'aide de PHP au lieu de laisser faire Apache.
 
Ca marche très bien sous PC, mais pas sur mobile (mon site est un site WAP 2.0 XHTML), le problème sur mobile c'est qu'il ne renomme pas correctement le fichier lors du téléchargement, en clair j'ai une page telechargement.php qui créé le fichier "fichier.mp3", mais quand je télécharge sous mobile, le fichier porte le nom "telechagement.mp3" au lieu du nom que je lui est indiqué.
 
extrait de mon code :  

Code :
  1. // Le code d'accès est valide : on lance le téléchargement du fichier
  2. if(file_exists($fichier_local) == true)
  3. {
  4.  if(strstr($HTTP_USER_AGENT, "MSIE" ))
  5.   $attachment = "";
  6.  else
  7.   $attachment = " attachment;";
  8.  header("Content-type: audio/mpeg" );
  9.  header("Content-Disposition:".$attachment." filename=fichier.mp3" );
  10.  header("Content-Description: File Transfert" );
  11.  header("Content-Length: ".filesize("./mp3_files/fichier.mp3" ));
  12.  readfile("./mp3_files/fichier.mp3" );
  13. }


 
on voit qu'à la ligne 10 j'ai bien spécifié filename=fichier.mp3, mais ça ne prend que sur PC...


Message édité par Da KJ le 01-03-2007 à 13:11:50
Reply

Marsh Posté le 01-03-2007 à 14:36:53    

Si tu respectes les standards je suis sur que les navigateurs légers respectant les normes sans chercher à interprêter les erreurs sera ravi :whistle:
 
Donc relis bien tes " et penses aussi à ' quand " se justifie pas et en plus t'embrouille ;)

Reply

Marsh Posté le 01-03-2007 à 15:05:07    

Pourrais-tu être plus explicite ?
 
Je pensais que " et ' c'était la même chose...
 
edit: j'ai remplacé les double quotes par des simples, ça ne change rien


Message édité par Da KJ le 01-03-2007 à 15:18:10
Reply

Marsh Posté le 02-03-2007 à 10:45:59    

Bases de php:
 
- simple quote -> chaine de caractères "simple"
 
- double quote -> chaine de caractères, mais les caractères sont évalués à l'intérieur avant de pondre le résultat de la chaine. Pour échapper l'interprêtation d'un caractère évaluable/spécial, il faut utiliser \ devant

Code :
  1. $jour='vendredi';
  2. $chaine1='on est $jour'; //on est $jour
  3. $chaine2="On est $jour"; //on est vendredi


 
Passé ce petit rappel, tu ferais mieux de faire

Code :
  1. header('Content-type: audio/mpeg');
  2. header('Content-Disposition:'.$attachment.' filename="fichier.mp3"'); // ou header("Content-Disposition:$attachment filename=\"fichier.mp3\"" );
  3. header('Content-Description: File Transfert');
  4. header('Content-Length: '.filesize('./mp3_files/fichier.mp3'));


Tu aurais vu qu'à la ligne 2 il manque des guillemets autour du nom de fichier, ça changera peut être pas grand chose, mais si déjà tu respectes ce qu'il faut, y'a plus de chances que ça marche ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed