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

Symfony PHP Discussion :

Interdire l'accès aux fichiers du projet lorsque l'utilisateur n'est pas connecté


Sujet :

Symfony PHP

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Février 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Interdire l'accès aux fichiers du projet lorsque l'utilisateur n'est pas connecté
    Bonjour,
    J'ai un dossier de fichier pdfs à la racine de mon projet symfony. Lorsqu' un utilisateur saisit le chemin complet vers un pdf, le fichier s'affiche même si l'utilisateur n'est pas connecté à l'application.
    Comment bloquer toute tentative d'accès à un fichier du projet si l'utilisateur n'est pas connecté?

    Merci.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Salut,

    Je ne peux pas te répondre spécifiquement pour symfony.
    Par contre d'une manière générale il suffit de mettre tes fichiers pdf dans un dossier protégé par un fichier .htaccess avec la mention "deny from all". Cela interdira l'accès à ces fichiers depuis une url. Ensuite tu pourras les faire lire par php (après connexion) avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header('Content-type: application/pdf');
    readfile("PROTEGES/mon_fichier.pdf");
    Une variante consiste à proposer le fichier en téléchargement.

  3. #3
    Membre habitué
    Ingénieur d'études et de développement
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur d'études et de développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Points : 154
    Points
    154
    Par défaut
    Si un utilisateur a accès aux fichiers c'est qu'ils sont sous le répertoire web, n'est-ce pas ?

    Ce n'est pas une bonne pratique. Les fichiers présents sous web sont les fichiers publiques qui peuvent être accédés par n'importe qui (utilisateurs, robot comme google, aspirateur de site).

    Or tu veux gérer des autorisations sur ces fichiers. Je te recommande donc des les mettre dans un dossier "uploads" ou "data" que tu placeras au même niveau que web. Il sera donc inaccessible (n'oublie pas ta config htaccess pour la sécurité).

    Ensuite il te faudra créer une route qui permettra la récupération de ces fichiers. Exemple : www.mon-site.com/download/nom-du-fichier.pdf

    Cette route appellera une fonction de controller et dans cette fonction tu pourras parfaitement autoriser le téléchargement du fichier ou l'interdire.

    Ainsi tes fichiers sont parfaitement sécurisés, non accessibles depuis l'extérieur. Tu peux même les renommer avant envoi, stocker en base le fait que le fichier ait été téléchargé… bref tu peux tout faire.

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Février 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Ok!Merci ABCIWEB et Damiensan.Je teste tout cela et je reviens vers vous.

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Février 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'ai testé et ce n'est pas toujours résolu; quand l'utilisateur n'est pas connecté, il n'a pas accès au dossier pdf. Même quand il est connecté une erreur 403 est générée lorsqu'il veut accéder à un fichier du dossier pdf. Je vais vous décrire plus explicitement ce que je fais:
    J'ai un dossier pdf à la racine de mon projet symfony qui contient des fichiers pdfs et un fichier .htaccess qui contient "deny from all".
    j'ai une vue twig qui contient un bouton qui permet de déclencher l'export de l'iframe contenue dans la page. Lorsqu'on clique sur le bouton de l'export une requête ajax est construite; Dans la requête ajax je fais appel à un controlleur qui va faire l'export et me retourner l'url du pdf généré. Quand la requête ajax recoit une réponse de succès il ouvre le pdf en utilisant l'url qui a été envoyé. Pour cela j'utilise un window.open(url_du_pdf_genere); L'export est bien réalisé mais l'ouverture du fichier avec window.open me renvoi une erreur 403.

    Ma question est comment ouvrir le pdf qui est protégé avec htaccess avec jquery?
    Sinon quel autre principe je pourrai utiliser pour réaliser cela?j'aimerai que lorsqu'on clique sur le bouton d'export, à la fin de l'export un nouvel onglet est ouvert et contient le pdf généré.

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Il faut faire lire le fichier par php comme dans l'exemple que j'ai donné. Pas besoin de passer par jquery.

  7. #7
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    Bonjour,

    Ou génère tu ton fichier exporté ?

    Pour moi tu as 2 solutions :
    -> soit tu copie temporairement ton fichier dans un repertoiure public, mais le tempsq qu'il soit supprimer tu va le rendre accessible à d'autres... pas cool.
    ->soit tu te debrouille pour que ton controlleur renvoie autre chose que de l'html.

    Dans ta méthode tu change le header vers application/pdf (ou un truc du genre)
    puis tu affiches le contenu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo file_get_content("tonfichierPDF");
    Ca devrait te générer un fichier PDF valide.

    Ta méthode, comme toute méthode dans un controlleur peut être mise derrière un système de permission (comme les autre actions)
    L'intégration dans jquery n'est que du detail, et je te conseille fortement de ne pas t'embeter avec ca pour le début. Génère déjà ton PDF, ensuite tout ira bien.

  8. #8
    Nouveau Candidat au Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Février 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    je reviens vers vous car ca ne marche toujours pas.
    Le pdf généré se trouve dans un dossier pdf qui se trouve à la racine de mon projet symfony.
    Voici le code du bouton javascript qui fait appel à la fonction d'export:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $('#okpdf').click(function () {
            var id={{rapport.id}};
            var orientation=$('#orientation').val();
            $(location).attr('href',"{{ path('icm_reporting_cinematique_rapport_exportpdf') }}?url="+id&'orientation='+orientation);
            });
    et voici la fonction qui fait l'export:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public function exportpdfAction()
         {
                $idrapport=$_GET['url'];
                $orientation=$_GET['orientation'];
                $extension='pdf';
                $manager= $this->get('session')->get('entitymanager');
                $em = $this->getDoctrine()->getManager($manager);
                $user=$this->container->get('security.context')->getToken()->getUser();
                $user=$em->getRepository('ICMUserBundle:User')->findOneByIdentifiantuser($user->getIdentifiantuser());
                $iduser=$user->getId();
                $basepath = $this->getRequest()->getBasePath();
                $falgun_pdf = '';
                $response = new Response();
                $result=$this->container->get('icm_api.rapport')->export($iduser,$manager,$basepath,$extension,$idrapport,$falgun_pdf,$response,$orientation);
     
     
                $rapport=$em->getRepository('ICMReportingBundle:rapports')->find($idrapport);
                $nomimage=str_replace(' ','_',$rapport->getTitre()).'.pdf';
                $urlpdf=$_SERVER['DOCUMENT_ROOT'].$basepath.'/pdf/'.$nomimage;
                $rapportchem = dirname(__FILE__)."/../../../../pdf/";   
                $response->headers->set('Content-Type', 'application/pdf');
                $response->setContent(file_get_contents($rapportchem.$nomimage));
                $response->headers->set('Content-Type', 'application/force-download'); 
                $response->headers->set('Content-disposition', 'filename='. $nomimage);
                echo file_get_content($rapportchem.$nomimage); 
                return $response;
         }
    Tout se passe bien jusqu'à $result: le pdf est bien généré et a pour nom $nomimage.
    Maintenant tout le problème réside au niveau de la seconde partie qui consiste à afficher le pdf.
    le readfile ou le echo file_get_content n'affiche rien. Une erreur m'est renvoyée:
    The Response content must be a string or object implementing __toString(), "boolean" given. (500 Internal Server Error)
    S'il vous plaît éclairez moi sur cette erreur. Comment je peux faire pour retourner et afficher le pdf dans un nouvel onglet?

  9. #9
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    bonsoir,

    pour renvoyer le contenu d'un fichier, utilise la classe BinaryFileResponse.
    http://symfony.com/fr/doc/current/co...-serving-files

    PS:
    utilise la balise "code" dans tes messages

Discussions similaires

  1. Interdire l'accès aux fichiers JS
    Par movlw dans le forum Apache
    Réponses: 7
    Dernier message: 27/06/2015, 11h46
  2. Interdire l'accès aux fichiers pdf
    Par fveto dans le forum Apache
    Réponses: 1
    Dernier message: 16/06/2015, 15h14
  3. Interdire l'accès aux fichiers d'une session
    Par rec82 dans le forum Windows XP
    Réponses: 1
    Dernier message: 01/03/2011, 14h49
  4. Interdire l'accès aux fichiers dans certains cas
    Par ant0inep dans le forum Langage
    Réponses: 1
    Dernier message: 04/10/2010, 16h04
  5. Réponses: 1
    Dernier message: 23/08/2009, 16h56

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