IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Sécurité] gestion et restriction de téléchargement


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 41
    Par défaut [Sécurité] gestion et restriction de téléchargement
    Bonjour,

    je souhaite mettre des fichiers en téléchargement (des images), mais je veuxrestreindre leur accès. C'est-à-dire que le téléchargement de ces images requiert une identification (ce qui permet de gérer qui a le droit de télécharger quelle image).

    J'ai déjà un script qui tourne, mais je suis confronté à 2 problèmes :

    - je force le téléchargement avec une classique réécriture de l'entete http et l'emploi de la fonction readfile(), mais cela ne me permet pas de transmettre de gros fichier (>2Mo)

    - j'avais pensé mettre les images simplement en dehors du repertoire www pour qu'on ne puisse pas les atteindre en tapant simplment leur url, mais si je fais ça je n'arrive plus a y accéder par mes scripts. Si je les met dans le site, il faut utiliser un .htacces si j'ai bien compris, mais ce qui m'ennui c'est que je ne comprends pas comment je fais pour que seuls les scripts y accèdent (je ne veux pas que les utilisateurs aient accès à toutes les images). De plus si il faut tenir à jour une liste de user, cela fait doublon avec la base données.

    bref j'ai parcouru le net à la recherche d'une solution et je tombe toujours sur le couple readfile() et .htacces, et je ne m'en sors pas.

    Il me semblait pourtant vouloir faire quelque chose de tout ce qu'il y a de plus classique. Mais non, j'ai rien trouvé. D'où mon cri désespéré

    AU SECOURS !

  2. #2
    Membre éclairé Avatar de duplo
    Inscrit en
    Octobre 2004
    Messages
    294
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2004
    Messages : 294
    Par défaut
    tu fait en sorte que tes visiteur puissent se loguer, dans ta BDD la table qui geres les utilisateur contien un champ image ( ou autre c'est pour l'exemple )
    et ensuite tu fait une page qui affiche tes images que si l'utilisateur a 1 ( ou autre ) dans son champ image

  3. #3
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 41
    Par défaut
    En fait les gens doivent télécharger l'image et non la voir s'afficher dans le navigateur. Sinon ce serait simple et je n'aurais pas de problème.

    je pourrais aussi zipper les images, mais ça fait des manip en plus (et pour moi et pour l'utilisateur) qui au fond ne servent à rien.

    enfin ça ne me dit pas que faire pour rendre mes images accessible uniquement à mes scripts.

    Merci quand même pour l'idée.

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 720
    Par défaut
    Citation Envoyé par robindelhuxley
    enfin ça ne me dit pas que faire pour rendre mes images accessible uniquement à mes scripts.
    il suffit de les mettres en dehors du répertoire du serveur HTPP. Je lis que tu y a pensé mais tu ne dis pas ça qui ne fonctionne pas

    sinon pour la taille du fichier tu peux configurer ça dans le fichier php.ini.
    donnes nous plus de détails sur le type de fichier dont il s'agit peut-être cela nous donnera des idées

  5. #5
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 41
    Par défaut
    pour ce qui est de mettre le images en dehors du serveur http, je dis que je n'arrive plus à atteindre mes images, mais normalement ça devrait fonctionner ? J'ai essayé en indiquant le chemin complet genre "/home/mesimages/" ou "file:///home/mesimages", ou un chemin relatif en remontant genre "../../mesimages/" (et je me suis pas gouré dans le nombre de repertoire à remonter), et les droits indiquent que tous le monde peut lire le contenu de tous les dossiers et des images, donc je pensais qu'on pouvait pas faire de lien en dehors du serveur http. Alors on peut ou pas ?

    pour ce qui est de mes images, elles font maxi 10 Mo et sont au format jpg, mais j'ai cru comprendre que la fonction readfile() allait prendre trop de ressources et que pour des gros fichiers c'était pas bon. Donc c'est vrai que j'ai pas essayé de modifier le .ini.

    sinon c'est un problème de durée c'est ça ? les scripts s'arrête au bout de 30 seconde, avant que la transmission de l'image soit finie ?

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 720
    Par défaut
    Citation Envoyé par robindelhuxley
    pour ce qui est de mettre le images en dehors du serveur http, je dis que je n'arrive plus à atteindre mes images, mais normalement ça devrait fonctionner ? J'ai essayé en indiquant le chemin complet genre "/home/mesimages/" ou "file:///home/mesimages", ou un chemin relatif en remontant genre "../../mesimages/" (et je me suis pas gouré dans le nombre de repertoire à remonter), et les droits indiquent que tous le monde peut lire le contenu de tous les dossiers et des images, donc je pensais qu'on pouvait pas faire de lien en dehors du serveur http. Alors on peut ou pas ?
    oui on peut, toutes les fonctions PHP peuvent accéder aux fichiers de ta machine même si ils ne sont pas dans "www"

    pour ton problème de taille de fichier tu pourrais par exemple créer un répertoire accessible seulement quelque minutes et copier le fichier dedant
    sinon dans le fichier php.ini tu peux aussi modifier la durée de 30 secondes
    HTTP n'est pas prévu pour de tels gros fichiers. peut-être que tu devrais passer par FTP pour ça

  7. #7
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 41
    Par défaut
    bon si on peut mettre les images où on veut, faut que je trouve ce qui merde. a priori le chemin d'accès est bon, pour ce qui est des droit, la lecture seule devrait suffire, donc je sais pas trop... pas d'idée pour trouver mon erreur...

    sinon pour les images :
    - j'ai bien pensé à créer des dossier temporaires mais ça me parait un peu galère à faire, surtout que si je fais des liens vers des images, elles vont s'ouvrir dans le navigateur, et si je force le téléchargement... retour à la case départ.
    - j'ai bien un serveur ftp qui tourne, mais comment je gère l'accès pour que le script puisse déclenché le téléchargement mais que personne ne puissent accéder au image simplement en suivant le lien ?

  8. #8
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 720
    Par défaut
    Citation Envoyé par robindelhuxley
    bon si on peut mettre les images où on veut, faut que je trouve ce qui merde. a priori le chemin d'accès est bon, pour ce qui est des droit, la lecture seule devrait suffire, donc je sais pas trop... pas d'idée pour trouver mon erreur...
    il faut aussi que tous les répertoires du chemin aient les droits "x"

    Citation Envoyé par robindelhuxley
    sinon pour les images :
    - j'ai bien pensé à créer des dossier temporaires mais ça me parait un peu galère à faire, surtout que si je fais des liens vers des images, elles vont s'ouvrir dans le navigateur, et si je force le téléchargement... retour à la case départ.
    fait un lien en marquant "faites un clic droit et "enregistrez sous""

    Citation Envoyé par robindelhuxley
    - j'ai bien un serveur ftp qui tourne, mais comment je gère l'accès pour que le script puisse déclenché le téléchargement mais que personne ne puissent accéder au image simplement en suivant le lien ?
    à froid je te proposerai de nouveau d'utiliser des repertoires temporaires mais tu as des besoins particuliers donc mon cerveau trouvera des solutions à ces problèmes seulement après une bonne nuit de sommeil

  9. #9
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 41
    Par défaut
    pour les répertoires, ben effectivement tout le monde avait pas les droits x... arrrggghhhh ! Milles merci, bien que je tourne exclusivement sous linux depuis quelques mois déjà, je n'ai pas encore tout les bons réflexes, trop d'années sous windows et j'ai pris de mauvaises habitudes (de pensées) !!!

    pour la solution des liens avec clic droit, j'aime pas, trop d'utilisateurs savent pas s'en servir, et sous mac ils ont toujours pas de bouton droits à leur souris... (je sais : control clic). donc ce sera la solution de la dernière chance).

    enfin je comptais pas t'empêcher de dormir, mais si t'as solution demain, je reste preneur bien sûr

  10. #10
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 720
    Par défaut
    Citation Envoyé par robindelhuxley
    pour la solution des liens avec clic droit, j'aime pas, trop d'utilisateurs savent pas s'en servir, et sous mac ils ont toujours pas de bouton droits à leur souris... (je sais : control clic). donc ce sera la solution de la dernière chance).
    c'est le moment de leur apprendre alors. s'il veulent récupérer l'image sur leur disquen ils n'ont pas d'autre solution de toute façon

    Et sinon, pour les idées, je n'ai rien d'autre à te proposer par rapport à hier soir. Je pense que le serveur FTP avec des repertoires temporaires est la meilleure solution

  11. #11
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 76
    Par défaut
    Pour forcer le téléchargement, il suffit de modifier le header lors de l'envoie de l'image...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
     
    $filecontent = readfile('monfichier.jpg');
    $downloadfile= 'monfichier.jpg';
     
    header("Content-disposition: attachment; filename=$downloadfile");
    header("Content-Type: application/force-download");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".strlen($filecontent));
    header("Pragma: no-cache");
    header("Expires: 0");
     
    ?>
    Ca devrait marcher avec ca....

  12. #12
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 720
    Par défaut
    merci the_jeck mais le problème c'est qu'il a des fichiers qui peuvent faire 10 Mo et là la fonction "readfile" baisse les bars

  13. #13
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 76
    Par défaut
    Dans ce cas, il y a de nombreux autres moyens de lire un fichier...

    fopen / fread / fclose par exemple (vu sur php.net) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    $handle = fopen("monfichier.jpg", "rb");
    $contents = '';
    while (!feof($handle)) {
      $contents .= fread($handle, 8192);
    }
    fclose($handle);
    ?>

  14. #14
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 76
    Par défaut
    y a aussi ca :
    http://fr2.php.net/manual/en/function.file-get-contents.php

  15. #15
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 41
    Par défaut
    bon merci pour ces conseils, j'ai pensé aussi à une voie, faut que je réfléchisse et que je test tout ça (dès que j'aurais le temps).

    si je trouve un truc intéressant, je le rajouterai, on ne sait jamais ça peut servir.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Acrobat Pro 8] Gestion des restrictions
    Par Menhir dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 25/11/2014, 17h46
  2. Une erreur 233 de ms sql server
    Par Hokage dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/10/2009, 17h40
  3. Réponses: 2
    Dernier message: 05/10/2004, 22h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo