Securite fichier

Résolu
mortiis Messages postés 120 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 9 mars 2008 - 9 oct. 2004 à 16:26
mortiis Messages postés 120 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 9 mars 2008 - 25 nov. 2005 à 07:39
Bonjour à tous

Je fait un site ou il est possible de télécharger des fichiers.
Présentement je les protège par mot de passe via un .htaccess

J'aimerais me débarasser du .htaccess et faire la même chose par programmation avec php dans le but que le seul moyen de télécharger un fichier sur le site soit en cliquant sur un lien d'une page.

Je ne veut pas que l'utilisateur puisse télécharger un fichier en inscrivant l'adresse directement dans le navigateur.

Merci d'avance pour l'aide et pour le temps.

25 réponses

mortiis Messages postés 120 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 9 mars 2008
10 oct. 2004 à 07:08
Bonjour à tous

J'ai trouver la solution.

Ma solution est avec un fichier .htaccess
Aucun lien, même pas un lien sur mon site ne permet de télécharger le fichier.
Le seul moyen de faire downloader le fichier est avec un download forcé.

Voici le contenu du fichier .htaccess

AuthUserFile null
AuthGroupFile null
RewriteEngine On
ReWriteRule .*\.(pdf|zip|mp3)$ http://adresse_vers_ou_rediriger/ [R,L]

Voila sa fait ce que je veut.
Je ne sait pas s'il existe d'autres moyens et si c'est le meilleur, mais sa fonctionne et c'est appliquable aux sous doxxiers.

Merci à tous ceux qui ont tentés de m'aider.
Et bonne prog à tous.

Si sa intéresse quelqu'un voici le code PHP pour faire un download forcé :

$file = "path_complet_du_fichier";
header("Content-Type: application/force-download");
header("Content-Length: ".filesize($file));
$file_name = basename($file);
header("Content-Disposition: attachment; filename=".$file_name);
readfile($file);

À noter que ce code doit être seul dans la page, C'est à dire qu'il ne doit avoir aucun code HTML ni JavaScript ou autre.
Il ne doit pas y avoir de texte ni de print(); ni de echo ""

Personellement, moi je l'apelle dans un popup je trouve sa plus pratique.

Pour augmenter la sécurité, il est préférable de faire une redirection dans le fichier de download si l'utilisateur n'est pas enregistré (Utilisation de session) ou si la page de download n'est pas appelé à partir d'une page de votre site.

En utilisant ce fichier .htaccess combiné avec le fichier php de download forcé (avec votre sécurité dednas), d'après moi, vos fichiers sont protégés.

Si quelqu'un à des commentaires ou connait un meilleur moyen, j'aimerais savoir.

Alors la j'ai finis Bonne prog.
3
defkrie Messages postés 435 Date d'inscription vendredi 20 septembre 2002 Statut Membre Dernière intervention 20 novembre 2004
9 oct. 2004 à 19:54
garde les .htacces
cree une base de donnée aves les champ
int numero | char lien
0 | http://
......

sur le site a la place du lien traditionnel
tu fais un lien vers un script php a qui tu envoie le numero par exmeple 0 il recherhce dans la base le lien et lance un téléchargemnt automatique ( boite de windows)

\-> Defkrie !?!
\->http://ndwc.fwhost.net/
0
mortiis Messages postés 120 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 9 mars 2008
9 oct. 2004 à 20:14
Bonjour à tous

Merci pour ce conseil, mais ce n'est pac ce que je cherche.

Parce que de cette façon, si l'utilisateur connait le lien du fichier, il peut le tabper directement dans la barre d'adresse de son navigateur et je ne veut pas sa.

De plus je ne sait jamais quels liens seront disponibles, puisque mon script liste les fichiers qui sont dans un répertoire et c'est ce qui constitu les liens de ma page. J'ajoute et j'enlève souvent des fichiers de ce répertoire et sa serait long de mettre la base de données à jour chaque fois.

Si tu a une autre solution, je suis pret a en prnedre considération.

Merci beaucoup pour ton aide
0
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
9 oct. 2004 à 20:55
Autre astuce, en combination avec le message de defkrie.
Tu place tes fichiers zip/exe/tar... dans un dosseir, tu met le htaccess.
Ta table sql tu la fait comme ça :

CREATE TABLE download (
id int(11) NOT NULL auto_increment,
name varchar(255) DEFAULT '0' NOT NULL,
extension varchar(255) DEFAULT '0' NOT NULL,
code varchar(255) DEFAULT '0' NOT NULL,
nombre varchar(255) DEFAULT '0' NOT NULL,
titre varchar(255) DEFAULT '0' NOT NULL,
description varchar(255) DEFAULT '0' NOT NULL,
taille varchar(255) DEFAULT '0' NOT NULL,
dateajout varchar(255) DEFAULT '0' NOT NULL,
version varchar(255) DEFAULT '0' NOT NULL,
key id (id)
) TYPE= MyISAM;

Donc tu creer une page d'administration, tu inject les champs :
name = nom du fichier (sans l'extenstion) (ex : photoshop)
extension = extension de ton fichier (ex : .zip)
titre = titre de ton fichier (ceci sera afficher) (ex : Photoshop ! meilleur outil...)
description = desction du fichier (ceci sera afficher) (ex : creer une animation, des logos...)
version = version du prog (ex : 1.42342354354535)

Ensuite tu utilise la fonction date() avec le format que tu prefere (cf : date & heure, phpcs.com) pour le champ 'dateajout'
Taille : calcul de la taille du fichier filesize("photoshop.exe"); , 'nombre' tu met 0 ceci te permettra de faire un compteur de telechargement & enfin : 'code' que tu genere un nombre au hasard, ex : $code = rand(100000,999999);

DANS TON CODE: dés que ta la variabe $code, tu renomme le fichier par : ''.$name.''.$code.''.$extension.''

Voila, tu affiche le tout avec une while et un 'select `download` ORDER BY 'id' DESC. en sortie de la while tu aura un tableau, tu affiche le tout, comme ça tout est php.

Bon les liens doivent etre : http://tonsiteatoietrztgfrd.com/zip.php?id =NUMERO DU FICHIER&code=CODE ISSU DE LA TABLE 'code'.
Ceci selectionne la table 'download' par l'ID ($id), et sa compare le champ 'code' à $code, si il sont parail, sa telecharge le fichier par cette manniere :

'http://tonsiteatoifdsgfsdfgdfgdfg.com/fichier/'.$name.''.$code.''.'$extension.''

Dés que le script ajoute 1 au compteur de telechargement, tu renomme à nouveau le fichier, par :

$codenouveau = rand(100000,999999);
''.$name.''.$codenouveau.''.$extension.''

Et tu modifie le champ 'code' par la variable $codenouveau.

VOILA !

En claire : tu modifier à chaque telechragement le nom du fichier. (une partie)

Je te promet que si tu manipule bien le php&les requettes php, tu y reussi.

Si ta besoin d'aide supplementaire le forum est là pour ça, normalement je n'avais pas à te sortir un tel baratin, mais bon, desidement en ces jours-ci je suis assez motivier.

++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
9 oct. 2004 à 20:56
Desoler : nombre varchar(255) DEFAULT '0' NOT NULL, par nombre int(255) DEFAULT '0' NOT NULL,
0
mortiis Messages postés 120 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 9 mars 2008
10 oct. 2004 à 02:07
Bonjour à tous

Merci beaucoup, ta solution est asser intéressante et pas trop compliquer a implanter, je n'y avait pas penser.

Cela pourra servir à plusieurs.

Par contre, sa ne convient toujours pas à mes besoins, car je ne veut pas renommer mes fichiers, car je les utilise régulièrement avec d'autres programme et je ne veut pas les modifier.

De plus si quelqu'un réussit à trouver le nom de fichier, même s'il est renommé souvent, alors il peut le télécharger.

Je sait qu'il est possible de faire en sorte que le seul moyen de télécharger un fichier soit avec un lien dans une page.
Sa se fait avec les .htaccess je crois, j'ai trouver le code d'un htaccess qui est sensé faire sa, je l'ai essayer, mais sa bloque tous mes fichiers, alors je met le contenu ici dans l'espoir que toi ou quelqu'un d'autre sache m'expliquer pourquoi sa ne fait pas ce que je veut. et comment je pourait le modifier pour arriver au résultat voulu.

RewriteEngine On
RewriteCond %{HTTP_REFERER} !=""
RewriteCond %{HTTP_REFERER} "!^http://domain/.*$" [NC]
RewriteCond %{REQUEST_URI} "\.(txt|doc|pdf|zip|mp3)$"
RewriteRule .* - [F]

Merci à tous.
0
mortiis Messages postés 120 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 9 mars 2008
10 oct. 2004 à 02:09
Bonjour à tous

Ah oui, le problèmme avec ce htaccess, c'est que je ne peut même plus voir mes pages php, htm et autres, bref je ne peut plus accéder à rien du site.

Merci encore.
0
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
10 oct. 2004 à 02:55
Re,
Pas mal, pas mal ton htaccess !
Je pense qu'avec ce qu'on a fournis cela servirais bien d'autres.
Enfin bref [...]
J'espere que tu à reussi ce dont tu voulais, car un moment je me suis dit : "c'est impossible, il veut qu'on puisse pas y aceeder au fichier à distance, mais juste par une apge web..."
Bonne continuation à toi.
0
mortiis Messages postés 120 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 9 mars 2008
10 oct. 2004 à 03:44
Bonjour à tous

Merci pour ton encouragement, mais connait tu les htaccess, moi pas beaucoup.

C'est pourquoi je pose cette question.
J'ai une idée de ce que ce htaccess fait, mais je ne suis pas totalement certain.
Tout ce qui est caractère spéciaux dans ce htaccess, est pour moi du chinois.

J'aimerais vraiment comprendre, pour arriver à mes fins qui sont mentionnés plus haut.

Merci encore pour tout.
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
10 oct. 2004 à 20:29
Salut ;-)

Fais ceci :

tu as ton dossier où sont contenus tous tes fichiers (innaccessible via http)

Lorsques tu demandes un fichier (via une url du style fichier.php?fichier=fichier.zip), tu copies le fichier "fichier.zip" situé dans le répertoire innaccessible dans un répertoire accessible qui ne contiendra que le fichier en cours de traitement.

Ensuite tu fais un force download (cherche sur le site "forcer le téléchargement) vers ce fichier. Sous la ligne readfile('fichier.zip') (que tu auras placée en regardant "forcer le téléchargement") tu mets un @unlink('rep_temp/fichier.zip');

Si je n'ai pas été clair fais-le moi savoir stp :-)

a ++

http://www.vulgarisation-informatique.com : entraide, dépannage et vulgarisation informatique
0
mortiis Messages postés 120 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 9 mars 2008
11 oct. 2004 à 15:58
Merci beaucoup.

Cette solution permet de télécharger via une url.
Moi je ne voulait pas sa.

J'ai trouver la solution à ce que je cherchait et cette solution est dans le message juste avant le tien ou j'ai mis le code du htaccess et le code pour faire un download forcé.

Bonne prog.
0
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
13 oct. 2004 à 14:28
Ma solution été assez original lol,
Mais celle que mortiis à donner est sourment la meilleur :)
J'espere que encore quelques personnes donnerons des astuces.
0
mortiis Messages postés 120 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 9 mars 2008
13 oct. 2004 à 15:08
Bonjour à tous

Oui c'est vrai ta solution est très bonne, et je crois que je n'y aurais pas penser.

Par contre, je voulais trouver le moyen que se soit totalement impossible de télécharger le fichier en entrant le chemin dans la barrde d'adresse et que si jamais par hasard quelqu'un trouve l'adresse du fichier, peu importe son extention sa soit une page d'erreur qui lui soit retourner.

N'en demeure pas moin que ta solution est très bonne et pourrait me servir pour d'autres cas.

Merci encore pour l'astuce bien pensé.
0
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
4 juin 2005 à 14:44
J'ai une solution à l'adresse suivante:
http://www.phpcs.com/forum.v2.aspx?ID=277521

===========
Validez les réponses si ok...

ViewVite : HTML
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
4 juin 2005 à 14:54
Tu n'as donné qu'un partiel de solution, car ta solution empêche l'accès aux fichiers de n'importe quelle manière ;-)



a ++

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
mortiis Messages postés 120 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 9 mars 2008
4 juin 2005 à 15:09
Salut Anthomicro,
Tu te trompe et voici pourquoi.

En mettant ce code dans le fichier .htaccess,

AuthUserFile null
AuthGroupFile null
RewriteEngine On
ReWriteRule .*\.(pdf|zip|mp3)$ http://adresse_vers_ou_rediriger/ [R,L]

Cela bloque l'accès aux fichiers mp3 pour toutes demande faite au serveur à partir d'un client.

Mais il y a quand même moyen d'envoyer le fichier à un client et c'est que le client ne demande pas le fichier dirrectement au serveur.

Le moyen est le download forcé.

Pour le faire, tu met un lien dans une page et ce lien dirige vers une autre page qui fait le download forcé.

voici le code pour faire le download forcé.

$file = "path_complet_du_fichier";
header("Content-Type: application/force-download");
header("Content-Length: ".filesize($file));
$file_name = basename($file);
header("Content-Disposition: attachment; filename=".$file_name);
readfile($file);

à noter que les paramètres peuvent êtres passé par la méthode get.
Pour mettre de la sécurité, il suffit de vérifier si l'utilisateur est bien loggé et qu'il a bien le droit de téléchargé, via variable session et base de données par exemple.

Il y a toutefois une règle à observer, dans la page ou tu fais le download forcé, tu ne doit pas avoir de code de sortie. Exemple : echo et print.

Voila j'espère que c'est plus clair comme sa.
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
4 juin 2005 à 15:22
mortiis > je parlais pas de ta solution, mais de la solution de grandvizir

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
4 juin 2005 à 15:23
ensuite pour le download forcé oui je connais mdr, je parle de grandvizir qui ne l'a pas mentionné

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
mortiis Messages postés 120 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 9 mars 2008
4 juin 2005 à 17:17
OK pas de troub
0
cs_nebunamirax Messages postés 1 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 6 juin 2005
6 juin 2005 à 15:50
salut

moi je suis un peu dans le meme probleme mais je voudrai juste
que personne ne puisse telecharger si il n'est pas loguer ( ma base de
donné est existante avec mots de passe etc..) et si possible utiliser
le htacces

merci
0
Rejoignez-nous