Partage
  • Partager sur Facebook
  • Partager sur Twitter

Dossier et sécurité

Sujet résolu
    9 octobre 2010 à 1:43:28

    Bonsoir,

    j'aimerai réalisé quelque chose mais je ne sais pas comment m'y prendre :

    j'ai un dossier feuilles où j'ai des pdf à l'intérieur.

    j'aimerai interdire l'accès à ce fichier aux personnes non connectées (variable $login et $mdp inexistantes) mais autoriser à la fois les personnes connectées ($login et $mdp existantes).

    j'ai essayé avec avec un .htaccess avec "Deny from all" et en utilisant les header pour afficher les pdf mais sous Internet Explorer ça coince.

    j'ai essayé avec les iframes mais ça coince aussi à cause d'une erreur -logique- 403 !

    merci beaucoup de m'aider car je ne sais pas comment faire :(
    • Partager sur Facebook
    • Partager sur Twitter
      9 octobre 2010 à 1:48:24

      Salut,

      quelques solutions:
      Soit avec des sessions.
      Soit avec htacess et htpasswd
      • Partager sur Facebook
      • Partager sur Twitter
        9 octobre 2010 à 1:50:34

        oui mais si je met par exemple :

        http://www.monsite.fr/feuille/exemple.pdf

        comment jouer avec les sessions là ?

        car j'ai pleins de pdf !

        merci
        • Partager sur Facebook
        • Partager sur Twitter
          9 octobre 2010 à 11:31:38

          Mettre en place une réécriture de façon à rediriger les demandes de PDF sur un script PHP qui servira, ou non, celui demandé :
          #Options +FollowSymLinks
          RewriteEngine On
          RewriteBase /
          
          RewriteRule \.pdf$ intermediaire.php [L]
          


          Le code d'intermediaire.php (ici à la racine) sur lequel sont re-routées les requêtes :
          <?php
          <?php
          session_start();
          
          define('FORBIDDEN', 403);
          define('NOT_FOUND', 404);
          
          function http_die($code, $message = '') {
              /* Cf http://www.w3.org/Protocols/rfc2616/rfc2616.html */
              $messages = array(
                  FORBIDDEN => 'HTTP/1.0 403 Forbidden',
                  NOT_FOUND => 'HTTP/1.0 404 Not Found',
              );
          
              header($messages[$code], TRUE, $code);
              if ($message) {
                  echo $message;
              }
              exit;
          }
          
          if (!isset($_SESSION['id'])) {
              http_die(FORBIDDEN);
          } else {
              $requested = $_SERVER['DOCUMENT_ROOT'] . $_SERVER['REQUEST_URI'];
              if (is_file($requested)) {
                  header('Content-type: application/pdf');
                  readfile($requested);
              } else {
                  http_die(NOT_FOUND);
              }
          }
          


          C'est une méthode parmi d'autres et ça peut être étendu aux documents autres que pdf.
          • Partager sur Facebook
          • Partager sur Twitter
            9 octobre 2010 à 13:04:50

            merci beaucoup !

            le problème est que je ne le comprends pas le but ...

            si tu as un peu de temps ce serait cool que tu m'expliques.

            Merci beaucoup :)

            • Partager sur Facebook
            • Partager sur Twitter
              9 octobre 2010 à 13:46:29

              Erf, ça l'était :/

              Bon, en temps normal, si on a un document PDF à l'adresse http://mondomaine.fr/mondocument.pdf, le serveur le sert directement et sans contrôle puisqu'il n'est pas possible de faire intervenir une session PHP sans que ce ne soit du PHP.
              * le client demande /mondocument.pdf
              * le serveur lui renvoie /mondocument.pdf


              Pour pouvoir (d'abord) utiliser cette session PHP afin d'autoriser ou non l'accès à ce document PDF, je suggère ici de rediriger (c'est purement interne ici), via la règle de réécriture, toute requête de demande de document PDF vers un script PHP. C'est ce dernier, alors, qui effectuera le contrôle d'accès en se basant sur les données de la session et l'affichera (readfile) si on y est autorisé.
              * le client demande /mondocument.pdf
              * le serveur exécute le script intermediaire.php (via la réécriture *.pdf => /intermediaire.php)
                  - si l'utilisateur est authentifié : le script lui affiche le contenu du document demandé
                  - sinon il est rejeté (erreur HTTP 403)


              En effet, les moyens sont limités pour pouvoir se baser sur une session PHP :
              * il faut soit un script PHP qui sert d'intermédiaire pour servir, ou non, le document
              * soit s'arranger pour que les documents à protéger soient pris pour des scripts PHP (c'est bien moins trivial que le premier cas)

              PS : l'authentification (création des variable de session - $_SESSION['id'] dans le code ci-dessus) c'est à un script, à part, qui n'est pas montré, de la réaliser.
              • Partager sur Facebook
              • Partager sur Twitter
                9 octobre 2010 à 13:55:32

                ah je comprends mieux.

                c'est bien ce que je voulais faire.
                quand j'ouvre mon pdf, un script php interdit ou non la vision du pdf.

                et le fichier intermediaire.php je peux le changer ou pas ? (si j'ai envie de mettre une iframe par exemple ?)

                car sous Internet Explorer le header('Content-type: application/pdf'); n'est pas pris en compte ... :/

                merci ;)
                • Partager sur Facebook
                • Partager sur Twitter
                  9 octobre 2010 à 14:21:08

                  Citation : fandusrfc

                  et le fichier intermediaire.php je peux le changer ou pas ?


                  Oui, bien sûr. Il y a sûrement possibilité de l'améliorer d'ailleurs.

                  Citation : fandusrfc

                  (si j'ai envie de mettre une iframe par exemple ?)


                  Normalement, oui.

                  Citation : fandusrfc

                  car sous Internet Explorer le header('Content-type: application/pdf'); n'est pas pris en compte ... :/


                  Bizarre.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 octobre 2010 à 22:00:13

                    un grand merci à toi julp.

                    ça fonctionne parfaitement.

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Dossier et sécurité

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown