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 :

A propos d'un fil précédent résolu, adaptation [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 55
    Points : 22
    Points
    22
    Par défaut A propos d'un fil précédent résolu, adaptation
    Bonjour,

    J'ai cherché sur le Net longtemps pour un souci perso et j'ai fini par trouver un sujet similaire sur ce forum de pro (mais je n'en suis pas une!!!).

    http://www.developpez.net/forums/d644907/php/langage/fichiers/proteger-sous-repertoire-contenu-acces-direct/

    Mon problème concerne aussi la protection d'affichage de sous-dossier d'un espace membre:
    La solution proposée sur ce forum est (je cite)

    <<<<<<

    par exemple:

    /fichiers/
    - .htaccess
    - toto.pdf
    - titi.pdf

    /download.php

    dans download.php


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $file = $_GET['file'];
    header('Content-type: ...');
    header('Content-length: ...');
    readfile('fichiers/'.$file);
    ?>
    ensuite les liens qui permettent d'accéder aux pdf ne sont plus
    du genre: http://www.tonsite.com/fichiers/toto.pdf mais
    http://www.tonsite.com/download.php?file=toto.pdf

    >>>>>>

    Pour moi il ne s'agit pas de download, et il y a 2 sous-dossiers à protéger et les fichiers ne sont pas des pdf mais des jpg et des gifs, et le site est en PHP5.

    J'ai compris que je peux utiliser un autre nom que "download" et qu'il faudra que je modifie l'adresse de mes liens (facile), sauf que mes fichiers sont dans l'espace membre (principal) et que dans le code de chacun il y a un src qui va chercher des jpg et des gif dans les sous-dossiers à masquer.

    Ce que je ne sais pas faire (même avec la doc php, désolée... je me suis mise dans le sous-forum débutants), c'est de mettre 2 sous dossiers (au lieu d'un dans le read file et quoi mettre dans les petis points du header content type et length).

    Merci de votre aide

    Steph

    PS le .htaccess c'est dans mes cordes.

  2. #2
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    salut ; un .htaccess suffirai dans le fichier contenant les jpeg et autres .

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 55
    Points : 22
    Points
    22
    Par défaut
    Bonjour Redoran,

    Alors je me suis trop avancée en disant que le .htaccess était dans mes cordes.
    J'ai mis un .htaccess dans les 2 sous dossiers avec le contenu suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    AuthGroupFile /dev/null
    AuthName "Acces interdit"
    AuthType Basic
    deny from all
    La conséquence est effectivement que l'on accède plus en direct avec l'URL aux fichiers (images) de ses 2 sous dossiers, par contre les images ne s'affichent plus (il y a une vignette montrant un lien brisé) lorsque les fichiers du dossier principal sont appelés (cliqués).
    Par exemple, dans mon dossier principal d'espace membre j'ai le fichier aaa.php et dans le code de celui-ci j'ai :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <img border="0" src="Photo/blabla.jpg" alt="legend" title="photo, copyright by the author"><br><br>
    et/ou
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <img border="0" src="Carte/yyyy-map.gif" alt="legend" title="map"><br><p>&nbsp;</p>

    Voilà.
    Peut-être le code du .htaccess est faux.

    Merci, Steph

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 55
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    UP
    Est-ce que quelqu'un peut aider ?
    Y compris Marcha (si toujours là) qui avait proposé la solution en 2008 ?
    Je ne suis pas restée inactive, même avec le message énigmatique de Redoran.

    J'ai cherché toutes les options du .htaccess, mais je n'ai rien trouvé (il ne s'agit pas ici d'empêcher le hot linking avec un rewrite, mais d'empêcher l'affichage des fichiers des sous-dossiers après saisie de l'URL complète sans être membre).

    Mon système d'espace membre est tout à fait standard (code PHP avec session, donc pas avec .htaccess et .htpasswd).

    Merci d'avance à celui ou celle qui voudra bien (le souci doit être assez trivial).

    Bon, je sais. A défaut il me reste toujours la possibilité de mettre tout le contenu des 2 sous-dossiers dans le répertoire principal qui, lui, est bien protégé de l'accès direct.

    Steph

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Ton htaccess est bon et rempli son role c'est à dire bloqué l'accès aux fichier en http.

    Donc évidemment quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img border="0" src="Photo/blabla.jpg" alt="legend" title="photo, copyright by the author">
    l'image ne s'affiche pas puisque bloquée par le htaccess.

    Tu dois donc aller lire cette image avec php pour ensuite l'afficher dans ta balise image.

    Prenons par exemple le script "lireimage.php" qui devra aller lire une image sur le disque et l'afficher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if(!empty($_GET['file']))
    {
    	$image = $_GET['file']; // A sécuriser pour ne pas lire n'importe quoi
    	header("Content-type: image/jpeg"); // A adapter en fonction de l'image
    	readfile($image);
    }
    else
    {
        // erreur pas d'image
    }
    tu devras ensuite utiliser ce script pour afficher les images :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img border="0" src="lireimage.php?file=blabla.jpg" alt="legend" title="photo, copyright by the author">
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 55
    Points : 22
    Points
    22
    Par défaut
    Bonjour Olivier,

    Merci vivement de réagir vite et de ta patience.
    Je suis vraiment newbie et cela ne marche pas (j'ai toujours mes images brisées), mais peut-être que je n'ai pas compris...
    Voilà ce que j'ai fait :
    1- j'ai créé un fichier lireimage.php avec le code ci-dessus (et seulement ce code) et je l'ai téléchargé dans le répertoire d'accueil de l'espace membre (celui où il y a les fichiers de type aaa.php qui appellent les photos et les cartes)
    2- dans aaa.php, j'ai modifié le src comme indiqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img border="0" src="lireimage.php?file=blabla.jpg" alt="legend" title="photo, copyright by the author">
    Comme je ne voyais plus de code faisant référence à mon sous-dossier Photo,
    dans l'étape 2, j'ai modifié le src
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img border="0" src="lireimage.php?file=Photo/blabla.jpg" alt="legend" title="photo, copyright by the author">
    mais cela ne marche pas plus.

    J'ai vérifié par affichage du code source que mes modifs avaient bien été prises en compte.

    A te lire, Steph

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Dans lireimage.php commente la ligne header("Content-type: image/jpeg"); et affiche directement le script en y accedant par son adresse (http://monsite.com/lireimage.php?file=tonfichier.jpg)

    Si erreur il y'a tu les verras ici.

    Si le script est correct tu devrais voir un ensemble de caractère bizarre (des données binaires)
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 55
    Points : 22
    Points
    22
    Par défaut
    Merci du pilotage Olivier !
    Donc j'ai suivi les 2 instructions (l'URL est plutôt comme http://monsite.com/membres/lireimage...tonfichier.jpg, sachant que membres est le répertoire principal de l'espace membres).
    Et la page s'affiche avec à l'écran (copié-collé):
    if(!empty($_GET['file'])) { $image = $_GET['file']; // A sécuriser pour ne pas lire n'importe quoi // header("Content-type: image/jpeg"); // A adapter en fonction de l'image readfile($image); } else { // erreur pas d'image }
    C'est à dire, sauf erreur, exactement le code du fichier lireimage.php commenté (donc pas du tout des données binaires).

    Pour explorer toutes (?) les possibilités, j'ai aussi essayé (avec le sous-dossier) http://monsite.com/membres/Photos/li...tonfichier.jpg, mais là j'obtiens une erreur 403.
    Merci de ton aide, Steph

  9. #9
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Si le code PHP s'affiche c'est qu'il n'est pas interprété ...

    Tu as bien entourer ton code des balises php au moins ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    J'ai fait une explication détaillée d'un mécanisme similaire sur ce thread. ça te donnera peut être des idées.

    A noter que tu peux utiliser ce comportement sans toucher à tes liens si tu sais utiliser l'URL rewriting

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 55
    Points : 22
    Points
    22
    Par défaut
    Bonjour Olivier,
    La nuit porte conseil et ce matin tôt j'ai effectivement pensé qu'il manquait les codes de langage php et j'ai corrigé.
    J'ai testé alors cela marchait (photo affichée)... mais quand j'essayais l'URL directe cela passait comme du beurre (photo affichée, aussi)!!!
    Alors je suis allée sur le forum et j'ai vu ton message (je rougis de honte d'une telle erreur!!!).
    Alors comme dans le point de départ du message (proposition de Marcha), il tenait compte du nom du sous-dossier avec le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    readfile('Photo/'.$image);
    j'ai modifié et là cela marche (photo affichée pour les membres, photo non affichée avec URL directe).
    Pour les visiteurs qui pourraient être intéressés, la différence est réelle:
    - ne marche pas, avec le sous-dossier inclus dans le code de la page principale src=...file=Photo/blabla.jpg !!!
    Donc je considère que le fil est résolu (merci aussi à Benjamin, mais je ne comprends pas sa remarque... trop compliqué pour mes connaissances).
    Juste une dernière question si Olivier est tenté:
    Dans ton code tu commentes avec :
    $image = $_GET['file']; // A sécuriser pour ne pas lire n'importe quoi
    Comment sécuriser? (si c'est de mon niveau, sinon pas de souci, le risque de hackers sur mon site est quasi nul).
    je ne tague pas le fil de résolu encore au cas où tu voudrais répondre à cette question.
    Merci 1000 fois Olivier

  12. #12
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Il faut vérifier que ce qui est contenu dans $_GET['file'] est effectivement bien une image , que ce que tu vas essayer de lire est bien dans le bon dossier , etc ...

    Le but est d'éviter que quelqu'un puisse appeller le script comme ça :
    lireimage.php?file=../../config/monfichierdeconfigsupersecret.php et récupérer des données qu'il ne devrait pas.

    A toi de chercher comment faire tout ça si tu te sent motivé
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 55
    Points : 22
    Points
    22
    Par défaut
    Bonjour Olivier,
    Il n'y a dans ce sous-dossier que des jpg et le .htaccess, et les photos n'ont rien de compromettant (c'est seulement pour protéger leurs auteurs), donc je ne vais pas aller plus loin (il faut aussi savoir ses limites), mais cela peut intéresser d'autres.
    Donc je te remercie encore et je te souhaite le meilleur.
    Et je tague "résolu"
    Steph

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

Discussions similaires

  1. Question à propos de CSMA/CD et sans fil
    Par arkham55 dans le forum Réseau
    Réponses: 1
    Dernier message: 09/01/2012, 12h15
  2. Question à propos des fils RSS
    Par kryogen dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 05/02/2009, 18h42
  3. A propos du composant DBGrid
    Par _Rico_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/07/2002, 09h18
  4. Langage le mieux adapté pour application client serveur ?
    Par guenus dans le forum Débats sur le développement - Le Best Of
    Réponses: 4
    Dernier message: 17/06/2002, 15h46

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