Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/02/2007, 22h08   #1
Futur Membre du Club
 
Inscription : décembre 2005
Messages : 69
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 69
Points : 19
Points : 19
Par défaut Sécurité des données

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.
DevloNewb' est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2007, 23h01   #2
Membre Expert
 
Inscription : janvier 2007
Messages : 1 452
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 452
Points : 1 914
Points : 1 914
Salut,

il suffit de faire réaliser la lecture du mp3, non pas par apache, mais par php.

En somme tu dois avoir une page, disons telechargement.php, avec deux arguments. Le code allopass, et le fichier désiré.

Dans ce fichier, la première chose que tu dois faire c'est vérifier la validité du code allopas. Si le code n'est pas valide, tu doisl e signaler à l'utilisateur avec une page HTML d'erreur lisible.
Autrement, dans le cas d'un code pleinement valide, tu executes la lecture du fichier avec php (cf fil_get_contents & co). Ensuite tu n'as plus qu'à manipuler les en tête HTML pour forcer un téléchargement (cf fontions header force/download & co).
A la fin du téléchargement du fichier, tu rends le code inutilisable.

Bien sur, tu devras mettre tes mp3 en dehors de ta racine web.... Sinon cela ne sert à rien ! Le but du jeu est bien de controler l'accessibilité (donc la lecture) des fichiers via PHP, et non laissé Apache faire cela tout seul.

bye
kaymak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2007, 01h12   #3
Futur Membre du Club
 
Inscription : décembre 2005
Messages : 69
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 69
Points : 19
Points : 19
Merci kaymak de ta réponse, ta solution fonctionne impécablement du moins sur PC... en effet mon site est site WAP 2.0 XHTML (tél portable, PDA). Je vais tenter d'expliquer pourquoi ça ne marche pas sur mon navigateur mobile...

Lorsque j'utilise Apache pour télécharger, j'indique à Allopass en "cible" de téléchargement directement le fichier mp3, donc quand l'utilisateur clique sur OK après avoir entré son code, le code est vérifié sur les serveurs d'allopass puis en cas de validation pointe sur le lien de mon fichier.

En revanche lorsque j'utilise PHP pour télécharger (avec la méthode que tu me suggères donc), j'indique à Allopass non plus un fichier mp3, mais un fichier php (telechargement.php) qui lui va permettre le téléchargement du fichier mp3. Et bien que ça marche sur PC, pour une raison que j'ignore sur mobile lorsque je clique sur OK (formulaire d'accès), au lien d'interpréter le fchier téléchargement.php, il tente de télécharger ce même fichier php ! Du coup je n'ai jamais accès au fichier mp3 qu'il devrait me créer.

Bref, si jamais il n'y a pas d'issue pour faire le téléchargement en PHP, je me demandais s'il y avait une autre méthode avec Apache (.htaccess) qui permettait d'autoriser l'accès à un fichier uniquement via un script... où pensez-vous que c'est sans issue ?

(encore une fois il est tard et je ne sais pas si je suis clair...)
DevloNewb' est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2007, 11h20   #4
Futur Membre du Club
 
Inscription : décembre 2005
Messages : 69
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 69
Points : 19
Points : 19
En fait je viens de remarquer qu'il télécharge bien le bon fichier mp3 en php mais il le renomme "telechargement.php", maintenant il faut que je trouve pourquoi...
DevloNewb' est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2007, 11h35   #5
Futur Membre du Club
 
Inscription : décembre 2005
Messages : 69
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 69
Points : 19
Points : 19
J'ai changé le type MIMIE et ai mis : header("Content-type: audio/mpeg"); à la place de force/download, et maintenant je télécharge un fichier "telechargement.mp3", y'a du progrès mais je n'ai toujours pas le nom du fichier...
DevloNewb' est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2007, 11h53   #6
Futur Membre du Club
 
Inscription : décembre 2005
Messages : 69
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 69
Points : 19
Points : 19
Je vous met la partie du code qui merde :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
	// Le code est valide : on lance le téléchargement du fichier
	if(file_exists($fichier_local) == true) 
	{
		if(strstr($HTTP_USER_AGENT, "MSIE"))
			$attachment = "";
		else
			$attachment = " attachment;";
 
		header("Content-type: audio/mpeg");
		header("Content-Disposition:".$attachment." filename=fichier.mp3");
		header("Content-Description: File Transfert");
		header("Content-Length: ".filesize("./mp3_files/fichier.mp3")); 
		readfile("./mp3_files/fichier.mp3");
	}
sur PC ça me lance bien le fichier "fichier.mp3" mais sur mobile ça me lance "telechargement.mp3" (telechargement est le nom du script qui contient ce code...)
DevloNewb' est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2007, 09h28   #7
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
regarde dans la FAQ là :
http://php.developpez.com/faq/?page=..._forcedownload
il y a 2 entêtes à mettre pour que le nom du fichier soit reconnu par le maximum de client
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h42.


 
 
 
 
Partenaires

Hébergement Web