Lothar: Dokument schützen

Hallo,
wenn ich aufrufe www.......de/Listen/L1.pdf, so wird die PDF-Datei angezeigt.
Dies soll nicht möglich sein.
Allerdings soll mein php-Programm die Datei lesen können.
Wie mache ich dies?

  1. Wie mache ich dies?

    Du sorgst am besten dafür, dass aus dem Ordner /Listen/ nichts ausgeliefert wird. Freilich muss dann Dein PHP-Skript in einem anderen Verzeichnis liegen.

    Ist es ein Apache Webserver, dann stelle eine Datei mit dem Name .htaccess hinein und notiere darin:

    deny from all

    Geht das nicht, dann kontaktiere den Service Deines Webhosters. Der hat Informationen, die Du uns nicht lieferst.

    Fred

    1. Ist es ein Apache Webserver, dann stelle eine Datei mit dem Name .htaccess hinein und notiere darin:

      deny from all

      Danke erst einmal!
      Natürlich möchte ich etwas lernen und habe deshalb nach dem deny from all
      geforscht.
      Und jetzt ist die Verwirrung groß.
      Ich habe folgendes Beispiel gefunden:
      order allow,deny
      deny from 87........
      allow from all

      Zu "order allow,deny" finde ich "grundsätzlich ist alles gesperrt"
      1. Warum dann zusätzlich die "deny 87...."-Angabe?
      2. Hebt das "allow from all" nicht die Sperrung durch "order allow,deny" wieder auf?
      Gruß
      Lothar

      1. Hi,

        Ich habe folgendes Beispiel gefunden:
        order allow,deny
        deny from 87........
        allow from all

        Zu "order allow,deny" finde ich "grundsätzlich ist alles gesperrt"

        Nein, ORDER hat eine andere Funktion als zu „sperren“.

        1. Warum dann zusätzlich die "deny 87...."-Angabe?
        2. Hebt das "allow from all" nicht die Sperrung durch "order allow,deny" wieder auf?

        ORDER ALLOW, DENY gibt die Reihenfolge an, in der ALLOW und DENY berücksichtigt werden sollen.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Und die 87 ist aus irgendeinem Beispiel vemutl., wo jemandes IP mit 87 begann.
          Ich verwendete

          AuthType Basic
          AuthName "no public area"
          Deny from all

          Ich finde es allerdings immer besser, die Dateien, die von außen nicht aufrufbar sein sollen auch nicht in öffentliche Verzeichnisse zu stellen. Also in eine höhere Ebene als das DOCUMENT_ROOT. Die Scripte können natürlich noch darauf zugreifen. Bei manchen Hostern ist das aber leider nicht möglich.

          Cheers,
          Baba

          1. Moin!

            AuthType Basic
            AuthName "no public area"
            Deny from all

            "Order allow,deny" hat dieselbe Wirkung.

            - Sven Rautenberg

      2. Moin!

        Ich habe folgendes Beispiel gefunden:
        order allow,deny
        deny from 87........
        allow from all

        Zu "order allow,deny" finde ich "grundsätzlich ist alles gesperrt"

        1. Warum dann zusätzlich die "deny 87...."-Angabe?
        2. Hebt das "allow from all" nicht die Sperrung durch "order allow,deny" wieder auf?

        Die Reihenfolge in der Datei ist irrelevant, relevant ist die definierte Reihenfolge in "Order".

        Order definiert drei Ebenen - aber nur zwei sind explizit angegeben, weil die höchste Ebene identisch ist mit der letzten Angabe.

        Also lesen wir: "order allow,deny"

        Das bedeutet:

        Erste Ebene: Pauschal sind alle Zugriffe verboten (letzte Angabe).

        Zweite Ebene: Außer es gibt eine Regel, die es erlaubt.

        Dritte Ebene: Außer es gibt eine Regel, die es verbietet.

        Man kann also zur pauschalen ersten Ebene Ausnahmen des Gegenteils definieren, und darin wieder Ausnahmen des Gegenteils vom Gegenteil. Oder mal konkreter formuliert: Wenn der Server pauschal alle IPs verbietet, kann man Ausnahmen für einzelne IP-Bereiche formulieren, die erlaubt werden, und innerhalb dieser Bereiche kann man wieder Ausnahmen für IP-Bereiche formulieren, die doch wieder verboten sind.

        Umgekehrt kann man "order deny,allow" konfigurieren, was dann bedeutet: Alle IPs sind erlaubt, man kann darin IP-Bereiche verbieten, und innerhalb dieser Bereiche wieder IPs erlauben.

        Du hast also:

        Grundsätzlich ist alles gesperrt. Als Ausnahme sind "alle IPs" erlaubt. Als Ausnahme der Ausnahme sind IPs mit "87..." gesperrt.

        Ich finde es unsinnig, dass man die erste Ausnahmeschicht für eine Pauschalerlaubnis verwendet, aber leider ist es wohl scheinbar im gesamten Internet so dokumentiert, und es funktioniert, weil niemand die dritte Ebene der Ausnahme-Ausnahme wirklich braucht.

        - Sven Rautenberg

  2. Tach!

    wenn ich aufrufe www.......de/Listen/L1.pdf, so wird die PDF-Datei angezeigt. Dies soll nicht möglich sein. Allerdings soll mein php-Programm die Datei lesen können. Wie mache ich dies?

    Du schiebst sie in ein Verzeichnis neben dem DocumentRoot. Vernünftige Hoster sollten eine solche Konstellation erlauben. Die Notlösung ist, sie in einem Verzeichnis im DocumentRoot zu lassen und den Zugriff mit Webserverkonfiguration zu sperren.

    /pfad/zum/kunden/ -> dein Pfad, innerhalb dessen du alles ablegen kannst, auf den aber keine Domain zeigt
    /pfad/zum/kunden/domain  <- da muss die Domain drauf zeigen (DocumentRoot)
    /pfad/zum/kunden/daten <- hier zeigt auch keine Domain drauf, da können Dateien liegen

    Schau beim Hoster in der Domainkonfiguration nach. Wenn er mehrere Domains pro Kunde anbietet muss man die sinnvollerweise auch alle in separate Unterverzeichnisse deines Kundenverzeichnisses zeigen lassen können.

    Auf das Datenverzeichnis kannst du nun von PHP aus mit absoluter Pfadangabe oder mit relativer '../daten/datei.pdf' zugreifen.

    dedlfix.

  3. Hallo,
    bis jetzt hat es dank Eurer Hilfe soweit geklappt.
    Ich öffne das directory "Listen", lese alle Dateinamen und zeige diese dem Anwender an.
    Nun soll er die Möglichkeit haben, eine auszuwählen und anzuzeigen.
    Meine Idee war die Dateinamen über <a href="/Listen/...>L1.pdf</a> anzuzeigen und die Dateien darüber aufrufen zu lassen
    Aber da greift ja dann der deny-Eintrag in .htaccess.
    Kann ich die pdf-Datei auch anders anzeigen?
    Schönen Abend bzw. guten Morgen
    Lothar

    1. Hi,

      Nun soll er die Möglichkeit haben, eine auszuwählen und anzuzeigen.

      Warum hast du dann vorher behauptet, dies soll nicht so sein:

      wenn ich aufrufe www.......de/Listen/L1.pdf, so wird die PDF-Datei angezeigt.
      Dies soll nicht möglich sein.

      ?

      Vielleicht beschreibst du erst mal nachvollziehbar, was du eigentlich und wirklich erreichen willst.

      MfG ChrisB

      --
      RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
      1. Hi,

        Warum hast du dann vorher behauptet, dies soll nicht so sein:

        Es sollte von außen kein Zugriff auf die Dokumente möglich sein, sondern nur über eine Auswahl in der Anwendung (die passwortgeschützt ist).

        Also: Auslesen des directories mit den geschützten pdf-Dateien,
        Anzeigen der dort vorhandenen Dateinamen.
        Der Anwender wählt eine aus und bekommt dann die pdf-Datei zu sehen.

        Gruß
        Lothar

        1. Ich vermute, Ihr habt meinen Beitrag um 0:23 nicht gesehen?

          Hi,

          Warum hast du dann vorher behauptet, dies soll nicht so sein:

          Es sollte von außen kein Zugriff auf die Dokumente möglich sein, sondern nur über eine Auswahl in der Anwendung (die passwortgeschützt ist).

          Also: Auslesen des directories mit den geschützten pdf-Dateien,
          Anzeigen der dort vorhandenen Dateinamen.
          Der Anwender wählt eine aus und bekommt dann die pdf-Datei zu sehen.

          Gruß
          Lothar

        2. Tach!

          Es sollte von außen kein Zugriff auf die Dokumente möglich sein, sondern nur über eine Auswahl in der Anwendung (die passwortgeschützt ist).

          Also: Auslesen des directories mit den geschützten pdf-Dateien,
          Anzeigen der dort vorhandenen Dateinamen.
          Der Anwender wählt eine aus und bekommt dann die pdf-Datei zu sehen.

          Da liegt also Werkzeug im Lager. Jeder soll zwar sehen, was es gibt, aber nicht selbständig hineingehen können, um es sich zu nehmen. Der Rundgang im Lager ist also auch nicht gestattet, weil man sonst zugreifen kann. Es gibt nur eine Schautafel am Eingang. Und wer kontrolliert nun den Zugriff, gewährt oder verbietet ihn? Der Lagerverwalter.

          Du musst also diese Komponenten nachbilden. Das Lager ist das Verzeichnis außerhalb des Docroot (zur Not innerhalb und generell zugriffsgeschützt). Dein Schautafel-Script listet die Werkzeuge auf, und ein Lagerverwaltungsscript reicht sie raus. Letzteres ist recht einfach. Nach der Zugriffsprüfung (berechtigt, gewünschter Dateiname zeigt auf eine vorhandene Datei im Verzeichnis (mit realpath() die Eingabe auf einen absoluten Dateinamen bringen, gegebenenfalls Verzeichnisnamen voranstellen)) sendest du Content-Type-Header für den Dateityp und reichst sie mit readfile() durch.

          dedlfix.

        3. Also: Auslesen des directories mit den geschützten pdf-Dateien,
          Anzeigen der dort vorhandenen Dateinamen.
          Der Anwender wählt eine aus und bekommt dann die pdf-Datei zu sehen.

          Wie realisierst Du den passwortgeschützten Bereich?

          -> mit .htaccess? dann schreibe Ausnahmen in diese für die pdfs.

          -> mit php? -> Dann arbeitet die .htaccess, wie sie soll, ne.

          Die Bereitstellung machst Du dann mit:

          header("Content-Type : application/pdf");  
          header("Content-Disposition: attachment; filename=".$downloadname.".pdf");  
          readfile($filename);  
          die();
          

          wobei du irgendwo die Sessionabfrage einbaust... Google mal "php header pdf".

          Cheers,
          Baba