Rechtevergabe bei Verlinkung auf Dateien

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

  • Rechtevergabe bei Verlinkung auf Dateien

    Hallo,

    stehe gerade vor folgendem Szenario:

    Ich habe eine Login-Seite gecodet, auf der sich Mitarbeiter mit ihrem Benutzernamen und Passwort authentifizieren müssen. Nach erfolgreicher Anmeldung liest mein Skript den Dateiordner des Benutzers auf dem Web-Server aus und zeigt ihm (entsprechend aufbereitet) die Dateien an, die dort liegen (Excel- und PDF-Dateien). Per Link sollen diese Dateien dann angezeigt werden.

    Mein Problem ist nun aber, wenn ich eine Datei datei.pdf habe und der Link dann wäre http://testserver/user1/datei.pdf, wie kann ich verhindern, dass ein anderer User diese Datei durch direkte Eingabe der URL aufrufen kann? Es soll jeder User nur die Dateien in seinem Userverzeichnis sehen können.

    Vielen Dank schon mal für Eure Ratschläge und Hilfe!

  • #2
    Lege die Dateien einfach außerhalb des HTML Verzeichnisses ab. Dann liest Du Sie mit PHP wieder ein, und sendest Sie direkt an den Browser ...
    h.a.n.d.
    Schmalle

    http://impressed.by
    http://blog.schmalenberger.it



    Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
    ... nur ohne :-)

    Kommentar


    • #3
      aarghs, ich idiot

      is wohl noch zu früh (erstmal n kaffee holen)

      danke dir!

      Kommentar


      • #4
        ääh, nein, moment.

        ich kann sie dann ja nicht mehr direkt verlinken. wie meinst du das mit
        Dann liest Du Sie mit PHP wieder ein, und sendest Sie direkt an den Browser
        ?

        soll ich sie dann mittels PHP in einen temporären Ordner unterhalb des DocumentRoots kopieren und dahin dann verlinken?

        Kommentar


        • #5
          nene Einlesen z.B. mit file() + implode() und senden an den Browser mit fpassthru()
          h.a.n.d.
          Schmalle

          http://impressed.by
          http://blog.schmalenberger.it



          Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
          ... nur ohne :-)

          Kommentar


          • #6
            hm, hab mir das mal gerade in selfphp angesehen mit "fpassthru". ist mir noch nicht ganz klar, wie ich das dann übergebe.
            haut das denn auch mit binärdaten hin?

            Kommentar


            • #7
              Original geschrieben von Hasenvater
              haut das denn auch mit binärdaten hin?
              ja
              h.a.n.d.
              Schmalle

              http://impressed.by
              http://blog.schmalenberger.it



              Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
              ... nur ohne :-)

              Kommentar


              • #8
                gut
                und wie macht man das mit fpassthru?

                by the way: ist es möglich, bei einem klick auf die datei, excel/acrobat reader mit der datei direkt aufzumachen, d. h., sie wird nicht im browser angezeigt, sonder direkt in excel/adobe reader?

                Kommentar


                • #9
                  Sicher, mußt halt die richtigen Header senden.

                  Kommentar


                  • #10
                    damit kann ich den download initiieren, ja - aber dass dann gleich die appliaktion mit dem ausgewählten file aufgeht ... oder hab ich was überlesen?

                    Kommentar


                    • #11
                      @schmalle

                      Wäre readfile() nicht einfacher als file() + implode() -> fpassthru()??

                      Oder hätte diese Lösung andere Vorteile??
                      Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                      Schön - etwas Geschichte kann ja nicht schaden.
                      Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                      Kommentar


                      • #12
                        ich nutze in so einem fall auch lieber readfile() weils einfacher, sauberer und schöner ist.
                        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                        Kommentar


                        • #13
                          also, ich habe das noch nicht ganz gerafft, wäre nett, wenn mir noch mal kurz jemand auf die Sprünge helfen würde:

                          Ich möchte einen Link ausgeben, der eine Datei (PDF oder Excel) in einem neuen Browserfenster ausgibt (bzw. besser noch: gleich die Applikation auf dem Rechner des Users startet und die Datei darin öffnet.)

                          Wie sähe der Code dafür aus?

                          Danke Euch!

                          Kommentar


                          • #14
                            damit kann ich den download initiieren, ja - aber dass dann gleich die
                            appliaktion mit dem ausgewählten file aufgeht ... oder hab ich was
                            überlesen
                            Du musst dem User schon die Wahl lassen ob er eine Datei erst speichern
                            will (und allenfalls mit einem Virenscanner drüber will) oder die Datei direkt im Browser öffnen will.
                            Die Eingabeaufforderung wenn man auf den Link klickt, lässt dem User ja
                            die Wahl die Datei direkt zu öffnen oder erst zu speichern.

                            Gruss

                            tobi
                            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                            Kommentar


                            • #15
                              achtung dieser code ist nicht 100% lauffaehig
                              der dateiname sollte des weiteren NICHT direkt aus einem superglobal genommen werden!!!

                              PHP-Code:
                              <?php
                              // get file extension
                              $extension substr(strrchr($_GET['file'], "."), 1);

                              // get mime type for file extension - extend if needed
                              switch ($extension)
                              {
                                  case 
                              "pdf"$ctype="application/pdf";
                                      break;
                                  case 
                              "exe"$ctype="application/octet-stream";
                                      break;
                                  case 
                              "zip"$ctype="application/zip";
                                      break;
                                  case 
                              "doc"$ctype="application/msword";
                                      break;
                                  case 
                              "xls"$ctype="application/vnd.ms-excel";
                                      break;
                                  case 
                              "ppt"$ctype="application/vnd.ms-powerpoint";
                                      break;
                                  case 
                              "gif"$ctype="image/gif";
                                      break;
                                  case 
                              "png"$ctype="image/png";
                                      break;
                                  case 
                              "jpg"$ctype="image/jpg";
                                      break;
                                  default:    
                              $ctype="application/force-download";
                              }

                              // send headers
                              header('Cache-control: private');
                              header('Content-Type: '.ctype);
                              header('Content-Length: '.filesize($_GET['file']));
                              header('Content-Disposition: attachment; filename="'.$_GET['file'].'"');

                              // send file with 8kb/s
                              // remove the sleep() from within the loop to send file with full speed
                              $buf_size 8192;
                              $fh = @fopen($_GET['file']) or die('failed to open requested file');
                              while (!
                              feof($fh))
                              {
                                  echo @
                              fread($fh$buf_size);
                                  
                              flush();
                                  
                              sleep(1);
                              }
                              @
                              fclose($fh);
                              die();
                              ?>
                              das beispiel soll nur einen ungefaehren loesungsansatz zeigen und hat keinen anspruch auf vollstaendigkeit / funktionstuechtigkeit
                              1101100 1101001 1100110 1100101 1101001 1110011 1100001 1100010 1101001 1110100 1100011 1101000

                              /(bb|[^b]{2})/

                              Kommentar

                              Lädt...
                              X