autorisation d'acces à un fichier

Eléphant du PHP | 440 Messages

06 mai 2010, 12:35

Bonjour à tous,

je créer actuellement un espace pour mon entreprise.
http://espace-client.xxx.com
http://esapce-admin.com
http://espace-doc.xxx.com

je voudrait savoir comment au niveau de "espace-doc" mettre en place une sécurité (htacces ?)qui empêche a quelqu'un de télécharger si il n'est pas authentifier sur l'espace espace-client.xxx.com.
(si il tape http://espace-doc.xxx.com/pdf/doc.pdf dans la barre de son navigateur)
Au niveau de mon espace membre (espace-client//espace-admin) tout ce fait en $_SESSION, je n'utilise pas de cookie.

Est-il possible de réaliser cette protection?

Merci

guigui69

Eléphant du PHP | 428 Messages

06 mai 2010, 13:41

Salut,

C'est mon opinion mais la plus simple protection est en effet l'utilisation d'un htaccess car (par exemple) même si tu mets en place un système sécurisé de téléchargement par tickets, rien n'empêchera un petit malin de trouver l'adresse directe de ton fichier et donc de le télécharger.

Maintenant au niveau de l'htaccess, il existe :

- la solution d'authentification => affiche une demande d'identifiant de connexion
- la solution de blocage des fichiers => <FilesMatch "\.doc$">Order Deny,Allow Deny from all</FilesMatch> (je bloque les fichiers DOC)
- les methodes combinées => authentification + blocage des fichiers si pas authentifié + URLrewriting si accès direct à un fichier, on affiche une page spécifique, .... etc

http://www.javascriptkit.com/howto/htaccess.shtml
http://www.webmaster-hub.com/publication/article4.html
http://www.evolt.org/ultimate_htaccess_examples

A+ ;)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

06 mai 2010, 14:31

Modération :
Afin d'obtenir plus de réponses, le sujet a été déplacé dans un forum plus approprié.

Merci de prendre le temps de lire les règlements
ainsi que l'intitulé de chaque forum avant de poster un nouveau sujet.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 440 Messages

06 mai 2010, 17:31

Merci pour ces indications.

Comment me conseilles-tu de procéder

Car mes utilisateurs s'authentifie sur un espace web (php/mysql) et je voudrait restreint l'acces à l'espace de téléchargement en autorisant seulement les personnes authentifier sur le site.

J'ai aussi la possibilité de mettre un alias du style http://espace-client.XXX.com/espace/
et espace est un alias qui pointe sur un autre dossier par contre la en php je ne peut pas y acceder. si ?

guigui69

ViPHP
AB
ViPHP | 5818 Messages

06 mai 2010, 18:10

Tu mets tes fichiers pdf dans un répertoire protégé (ex "FICHIERS_PROTEGES") par un .htacess avec la mention deny from all.

Donc seul php pourra aller lire dans ce répertoire.
Il te suffit donc de faire une page de téléchargement, exemple "téléchargement.php" qui sera protégée par ta variable de session qui donne le droit d'accéder au téléchargement et qui contiendra le code pour proposer le téléchargement du fichier voulu, récupérer par exemple dans une variable $_GET.

Et depuis tes autres pages tu proposes des liens de ce type <a href="téléchargement.php?fichier=nom_du_fichier.pdf">télécharger ce fichier</a>

Donc dans la page "téléchargement.php" tu récupère $_GET['fichier'] et tu propose son téléchargement, en s'assurant que c'est un fichier appartenant au dossier voulu et en créant le chemin final toi-même : $fich = 'FICHIERS_PROTEGES/'.$_GET['fichier'];
Car évidemment si tu mettais le nom du dossier dans le lien <a href ... ça ferait un gros trou de sécurité :wink:

Eléphant du PHP | 440 Messages

07 mai 2010, 09:15

Merci,

Pour la page de téléchargement.php je connaît mais étant donné que le dossier qui contient l'ensemble de mes documents est partagés, va etre commun à 2 sites.


il y a le site admin.xxx.com qui va alimenter en documents. (php/mysql)
le site client.xxx.com qui lui va récuperer les fichiers.

Sur mon espace de test j'ai un dossier:

Admin-xxxx (qui sur internet sera http://admin.xxx.com)
Client-xxxx (qui sur internet sera http://client.xxx.com)
espace-doc (C'est ici que sont stocké les fichiers pdf doc excel, que les admin vont envoyer et les client les télécharger)

Comment je doit faire pour que mon dossier espace-doc soit accessible au 2 parties et que je puisse le protéger?


Merci d'avance

guigui69

ViPHP
AB
ViPHP | 5818 Messages

07 mai 2010, 17:05

C'est deux sites distincts (nom de domaine différents) ou deux répertoires différents sur un même site ?

Eléphant du PHP | 440 Messages

09 mai 2010, 17:00

Le projet c'est donc:

Actuellement j'ai 3 dossiers:
- un dossier qui contient les pages admin.
- un dossier qui contient les pages client.
- un dossier (espace) qui contient les différents fichiers (pdf, doc,xls):
==> le dossier est rempli par un formulaire html (php/mysql) pour la partie admin.
==> le dossier est interroger par la partie client.

le dossier admin sera accessible à travers http://admin.xxx.com
le dossier client sera accessible à travers http://client.xxx.com

après c'est le dossier 'espace' ou il y a les fichiers pour y accéder. Et c'est espace que je voudrais protéger.

Une seul machine va héberger l'ensemble de ces éléments.

Comment mettre ca en place?

guigui69

ViPHP
AB
ViPHP | 5818 Messages

09 mai 2010, 19:07

Si un client est authentifié tu génère une variable de session et cette variable détermine l'accès au fichier telechargement.php.
Je ne vois pas le pb puisqu'une variable de session est valable pour tout le site indépendamment du répertoire :-k

Eléphant du PHP | 440 Messages

10 mai 2010, 12:25

Merci pour ta réponse.

Je ne vois pas trop se que tu veux dire.

le repertoire qui contient les fichiers ne se trouve dans le même dossier que le site web.
Et je bloque comment mettre accès à ces fichiers uniquement au personnes authentifiées à travers ma base.

Car j'ai deja fait une page php:
<?php session_start();
include ("fonction/fonction.bdd.php"); 
connexion_mysql();
 echo "une erreur";
	if (isset($_SESSION["id_uc"]) && isset($_GET["type"]) && isset($_GET["file"])) 
	{
	 echo "une erreur2";
	if($_GET["type"] == 'commun')
	{
	 echo "une erreur3";
	$res=mysql_query("select CONCAT('espace',chemin_dc, fichier_dc) as path from document_commun where id_dc='".$_GET["file"]."';") or die(mysql_error());
	//echo "select CONCAT(chemin_dc, fichier_dc) as path from document_commun where id_dc='".$_GET["file"]."';";
	}
	elseif($_GET["type"] == 'individuel')
	{
	 echo "une erreur4";
	$res=mysql_query("select CONCAT(chemin_di, fichier_di) as path from document_individuel where id_di='".$_GET["file"]."';") or die(mysql_error());
	}
	else
	{
	 echo "une erreur5";
	}
	
    if(mysql_num_rows($res)!=0){
        $row=mysql_fetch_object($res);
		//echo $row["path"];
        header("Content-type: application/force-download");
        header("Content-Length: ".filesize($row->path));
        header("Content-Disposition: attachment; filename=".basename($row->path));
        readfile($row->path);

    }
	
						

} else {

	 echo "une erreur";
    // header("Location: http://espace-cb.xxxx.com/...);
}

?>				
Mais comme le fichier se trouve dans un autre dossier (j'ai créer un lien entre le repertoire et mon dossier web), php ne le voit pas.
(Par contre si je tape dans mon navigateur http://client.xxx.com/espace/eeee/fichier.pdf ca fonctionne )
Je cherche vraiment une méthode simple pour réaliser l'accès au fichier.

Merci

guigui69

Eléphant du PHP | 440 Messages

10 mai 2010, 13:53

EN fait je pense avoir trouvé.

J'ai voulu me compliquer la vie mais en faite en php si je remonte dans mon dossier concernée + un htaccess au debut cela semble ok.


Défois je cherche vraiment compliqué. :)

Je regarde si c'est ok et je reply :D

guigui69