mandoMiau: PDF vor unbefugtem Download schützen

Hallo zusammen,
speichere bei einem eShop die Rechungen automatisch als PDF ab. Alle kommen in einen Ordner.
Wenn ich sie jetzt einfach schematisch(z.B. nach Rechnungnummer) speicher würde, könnte jemannd der einen Link zu einer Rechung hat, ja theoretisch alle Rechungen ansehen.
Jetzt habe ich mir gedacht, ich gebe einen Dateinamen, der z.B. ein md5-Hash aus Kundennummer, Rechungsnummer und einem nur mir bekannten Wort ist. Reicht das um Unbefugten den Zugriff zu verwehren, oder wie würdet Ihr das lösen?

Die nächste frage wäre dann noch, ob ich bei der Ausgabe des PDF per PHP, über einen Header o.ä. einen anderen Dateinamen ausgeben könnte.

Wäre nett wenn mir jmd. auf die Sprünge helfen könnte.

Grüße
mandoMiau

  1. Hi,

    speichere bei einem eShop die Rechungen automatisch als PDF ab. Alle kommen in einen Ordner.
    Wenn ich sie jetzt einfach schematisch(z.B. nach Rechnungnummer) speicher würde, könnte jemannd der einen Link zu einer Rechung hat, ja theoretisch alle Rechungen ansehen.
    Jetzt habe ich mir gedacht, ich gebe einen Dateinamen, der z.B. ein md5-Hash aus Kundennummer, Rechungsnummer und einem nur mir bekannten Wort ist. Reicht das um Unbefugten den Zugriff zu verwehren,

    "Security by obscurity" funktioniert *nie*.

    Wenn nur irgendwann mal versehentlich das Directory Listing für das Verzeichnis, in dem diese PDFs liegen, aktiviert würde - dann hättest du den Salat.

    oder wie würdet Ihr das lösen?

    Ausserhalb des Dokument Root, also vor Zugriff per HTTP geschützt, langern - und nur über ein Script, welches vorher Berechtigung prüft, ausgeben lassen.

    Die nächste frage wäre dann noch, ob ich bei der Ausgabe des PDF per PHP, über einen Header o.ä. einen anderen Dateinamen ausgeben könnte.

    Ja, siehe PHP-Manual bzgl. header.
    (Und auch einige weitere Punkte, die man insb. bei PDFs und deren dynamischer Auslieferung an den Internet Explorer beachten muss, werden in den dortigen Nutzerkommentaren angesprochen.)

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Hi,
      danke schonmal für Deine Hilfe.
      Hätte da noch nen paar Fragen:

      Ausserhalb des Dokument Root, also vor Zugriff per HTTP geschützt, langern - und nur über ein Script, welches vorher Berechtigung prüft, ausgeben lassen.

      Das würde ja heissen, ich müsste Sie oberhalb des Verzeichnisses packen, auf das die Domain verweist, oder?

      Wie kann ich den die Berechtigung prüfen? Hatte es mir jetzt so vorgestellt, das der Kunde auf nen Link klickt, und dann das PDF downloaden kann.
      Meinst Du, das ich dann in dem ausgebenden Script z.B. die Session des Kunden überprüfe, oder wie?

      Wäre nett wenn Du mir da noch nen bißchen auf die Sprünge helfen könntest.
      (nicht wundern wenn ich nicht sofort zurückschreibe, aber meine Frau steht schon mit dem Kochlöffel hinter mir *g)

      Danke
      mandoMiau

      1. Hi,

        Ausserhalb des Dokument Root, also vor Zugriff per HTTP geschützt, langern - und nur über ein Script, welches vorher Berechtigung prüft, ausgeben lassen.

        Das würde ja heissen, ich müsste Sie oberhalb des Verzeichnisses packen, auf das die Domain verweist, oder?

        Ja. Oder auch in ein weiteres Verzeichnis "neben" diesem.

        Wie kann ich den die Berechtigung prüfen? Hatte es mir jetzt so vorgestellt, das der Kunde auf nen Link klickt, und dann das PDF downloaden kann.
        Meinst Du, das ich dann in dem ausgebenden Script z.B. die Session des Kunden überprüfe, oder wie?

        Ja - und ob die Rechnung, die er sich anschauen will, auch "zu ihm" gehört. Diese Info muss also auch irgendwo hinterlegt sein.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
  2. speichere bei einem eShop die Rechungen automatisch als PDF ab. Alle kommen in einen Ordner.

    ... auf den der Benutzer direkt keinen Zugriff haben sollte.

    Jetzt habe ich mir gedacht, ich gebe einen Dateinamen, der z.B. ein md5-Hash aus Kundennummer, Rechungsnummer und einem nur mir bekannten Wort ist. Reicht das um Unbefugten den Zugriff zu verwehren,

    Nein, das ist eine Lösung »von hinten durch die Brust ins Auge«.

    oder wie würdet Ihr das lösen?

    Ein Script anlegen, dass das angeforderte PDF durchgibt, wenn die entsprechende Benutzer-Authentifizierung stimmt, das Dokument also zum Benutzer gehört.

    Die nächste frage wäre dann noch, ob ich bei der Ausgabe des PDF per PHP, über einen Header o.ä. einen anderen Dateinamen ausgeben könnte.

    Ja, mit dem HTTP-Header
    Content-Disposition: attachment; filename=dateiname.pdf

    Mathias