PDF-Files schützen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PDF-Files schützen

    Hallo Leute,

    bei uns wurde ein User-Verwaltungssysten für einen Kurs mit Hilfe von PHP und Postgresql erstellt.
    Beim Anlegen von neuen Usern werden diese in einer Tabelle angelegt und die Passwörter werden mit Hilfe von md5() verschlüsselt.

    Nun möchte ich aber den Zugriff auf die PDF-Dateien, welche in einem separaten Ordner innerhalb des Kurses liegen nur dann freigeben, wenn der User sich diese auch ansehen darf.
    Habe das bisher so gemacht, dass die Links zu dem PDF-Dateien nur angezeigt werden, wenn das entsprechende Flag in der Tabelle dafür gesetzt worden ist.
    Wenn die Leute allerdings die URL zu den PDF-Files haben, können sie diese allerdings direkt aufrufen.

    Wie kann ich das verhindern?
    Eine Möglichkeit wäre natürlich den Ordner, welcher die PDF-Dateien enthält mit ner .htaccess zu schützen, aber ich glaube nicht, dass dies in diesem Fall funktioniert...

    Hat jemand ne Idee?


    THX
    Martin

  • #2
    Was sind das für PDF-Dokumente?
    Wäre es denkbar diese erst zur Laufzeit, sprich in PHP
    selber zu erstellen? Dann bräuchtest Du diese nicht auf dem
    Server direkt ablegen und keiner käme mit einem
    "Direkt-Link" dran.

    Kommentar


    • #3
      Die PDF-Dokumente enthalten die Teile des Kurses.
      Es ist sozusagen eine Druckversion des Online-Kurses!

      Wie funktioniert das denn mit den PDF-Files, wenn man diese durch PHP erstellen lässt?

      Wenn der User das Flag hat, dass er sich diese PDF-Files anschauen kann, dann sieht er auch die entsprechenden Links in dem Fenster.
      Wie würde das denn dann funktionieren?
      Immerhin werden diese Links durch <a href...> dargestellt. und da müsste man doch nen statische Adresse angeben, oder?!

      Kommentar


      • #4
        Re: PDF-Files schützen

        Original geschrieben von vindiesel
        Eine Möglichkeit wäre natürlich den Ordner, welcher die PDF-Dateien enthält mit ner .htaccess zu schützen, aber ich glaube nicht, dass dies in diesem Fall funktioniert...
        Warum sollte das nicht funktionieren?

        Um dir die Pflege der .htaccess/.htpasswd zu sparen, könntest du jeden Request auf eine .pdf auf eine download.php?file={requested_pdf} weiterleiten (mod_rewrite).

        Die download.php ...
        - check_user();
        - header('pdf-download-header');
        - readfile($requested_pdf);

        Kommentar


        • #5
          @onemorenerd

          Geht das auch etwas ausführlicher?
          Habe nämlich in php bisher nicht wirklich viel gemacht und kann daher mit deinem Vorschlag nicht so viel anfangen!

          Kommentar


          • #6
            Natürlich gibts den Tipp auch in XL, aber ohne alles vorzukauen.

            Ausgangslage: Alle PDFs in einem Verzeichnis.
            Schritt 1: In dem Verzeichnis eine download.php erstellen, die folgendes macht:
            - den User überprüfen, so wie du es sonst auch machst (mit Session oder oder)
            - prüfen ob mit GET etwas übergeben wurde
            - prüfen ob es ein entsprechendes PDF gibt
            - mit header() dem Browser klarmachen, das jetzt ein PDF kommt
            - mit readfile() das PDF an den Browser weiterreichen
            Schritt 2: In dem Verzeichnis eine .htaccess erstellen:
            - mit mod_rewrite alles was (.+\.pdf) heißt auf download.php?pdf=$1 umschreiben
            Effekt: User klickt auf Link foo.pdf, .htaccess bewirkt Ausführung von download.php?pdf=foo.pdf, User bekommt foo.pdf - wenn er authorisiert ist.
            Zuletzt geändert von onemorenerd; 27.06.2005, 12:53.

            Kommentar


            • #7
              Ha, das hat ja mal gepasst.

              Hab heute auch nach einer Möglichkeit gesucht meine pdf-Files zu schützen und obiges gleich mal angewandt, läuft einwandfrei!!!

              Kommentar


              • #8
                @ExInfernis

                Kannst du bitte mal den Inhalt deiner .htaccess posten?
                Bei mir hakts an dieser Stelle leider noch...

                Kommentar


                • #9
                  Sorry, hat ein wenig gedauert:

                  RewriteEngine On

                  #Alle Anfragen fuer .pdf Dateien wird an download.php umgeleitet
                  RewriteRule ^(.+\.pdf)$ download.php?downid=$1

                  Kommentar


                  • #10
                    Hmmm....merkwürdig!
                    Bei mir steht folgendes:
                    RewriteRule ^(.+\.pdf)$ download.php?pdf=$1
                    Bekomme allerdings jedesmal folgende Fehlermeldung:

                    Fehler
                    Sie haben versucht auf die Seite www.xyz.de/blabla/PDF/download.php zuzugreifen
                    Diese Seite nicht vorhanden oder Sie haben keine Erlaubnis auf diese Seite zuzugreifen.

                    Ohne .htaccess gibts keinen Stess, aber dann kann sich ja jeder die pdf-files anschauen!
                    Die download.php und htaccess liegen im selben Verzeichnis wie die pdf-files ->www.xyz.de/blabla/PDF/

                    Wenn ich die download.php in ein anderes Verzeichnis kopiere, dann findet er die pdf-datei nicht mehr, obwohl ich den Pfad angepasst habe!

                    Jemand ne Idee?
                    Zuletzt geändert von vindiesel; 29.06.2005, 10:45.

                    Kommentar


                    • #11
                      Ein / vor download.php in der .htaccess und er sucht www.xyz.de/download.php, ein /blabla/download.php und er sucht www.xyz.de/blabla/download.php, ganz ohne / sucht er im aktuellen Verzeichnis.

                      Kommentar


                      • #12
                        Funzt leider irgendwie nicht!

                        Ich poste jetzt mal die Inhalte der einzelnen Dateien:

                        *********************************************
                        Inhalt download.php
                        <?php
                        //start the session
                        session_start();

                        //check to make sure the session variable is registered
                        if(!isset($_SESSION["username"])): header("Location: login.html"); endif;

                        // Hier werden die Parameter für das Einloggen in die Datenbank festgelegt
                        include "datenbank.inc.php";

                        //Die Verbindung zur Datenbank herstellen

                        $db = pg_connect("host=$dbHost port=$port dbname=$dbName user=$dbUser password=$dbPass") or die ("Die Verbindung zur Datenbank konnte nicht hergestellt werden!");

                        $query = "SELECT * FROM users WHERE username='$username';";
                        $result = pg_Exec($db, $query);
                        $row1 = pg_Fetch_Row($result);

                        //Die User-ID herausfinden
                        $anfrage2 = "SELECT user_id FROM users WHERE username='$username';";
                        $result2 = pg_exec($db, $anfrage2);
                        $row = pg_Fetch_Row($result2);
                        $id = $row[0];

                        $anfrage = "SELECT * FROM zugriffsrechte WHERE user_id='$id';";
                        $ergebnis = pg_Exec($db, $anfrage);
                        $row2 = pg_Fetch_Row($ergebnis);

                        pg_close($db);

                        if ($row2[7] == 1)
                        {
                        $dateiname = $_GET['pdf'];

                        if(file_exists($dateiname))
                        {
                        header("Content-type: application/pdf");
                        header("Content-Disposition: attachment; filename=\"$dateiname\"");
                        readfile($dateiname);
                        }

                        else
                        {
                        echo "DIE DATEI $dateiname IST NICHT VORHANDEN!";
                        }


                        }
                        else
                        echo 'KEINE BERECHTIGUNG!';

                        ?>
                        ***********************************************

                        Inhalt .htaccess

                        RewriteEngine On

                        #Alle Anfragen fuer .pdf Dateien wird an download.php umgeleitet
                        RewriteRule ^(.+\.pdf)$ download.php?pdf=$1
                        ***********************************************

                        Inhalt drucken.php
                        <a href="../../download.php?pdf=modul_1.pdf" target="_new">KLICK MICH</a>

                        ***********************************************

                        Position der einzelnen Dateien:

                        download.php -> http://www.xyz.de/blabla/
                        .htaccess -> http://www.xyz.de/blabla/PDF/
                        pdf-files -> http://www.xyz.de/blabla/PDF/
                        drucken.php -> http://www.xyz.de/blabla/Navigation/Drucken/

                        Kommentar


                        • #13
                          download.php -> http://www.xyz.de/blabla/
                          .htaccess -> http://www.xyz.de/blabla/PDF/
                          Wenn die .htaccess greift, dann weil ein Zugriff auf 'ihr' Verzeichnis erfolgen soll, zum Beispiel auf irgendein.pdf.
                          Die RewriteRule schreibt den Request nun um auf eine download.php IM SELBEN VERZEICHNIS, also auf http://www.xyz.de/blabla/PDF/download.php! Das ist falsch.

                          Machs so:
                          RewriteRule ^(.+\.pdf)$ http://www.xyz.de/blabla/download.php?pdf=$1

                          Kommentar


                          • #14
                            Ok, habs nun geändert!
                            Beim Aufruf der pdf-datei über den Link der drucken.php kommt jedesmal folgende Meldung:

                            DIE DATEI modul_1.pdf IST NICHT VORHANDEN!

                            Wieso findet er die Datei nicht?
                            Zuletzt geändert von vindiesel; 29.06.2005, 15:04.

                            Kommentar


                            • #15
                              Probier mal statt ../../drucken ... den absoluten Pfad anzugeben!

                              Kommentar

                              Lädt...
                              X