Verzeichnis-Sicherheit

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

  • Verzeichnis-Sicherheit

    Ich will demnächst ne seite ins Internet stellen, und u.a. will ich einen Link auf Word-Dokumente setzen, der Link wird erst nach einer Art Login angezeigt.

    Mit PHP hab ich ja die Möglichkeit, Scripte, die nicht innerhalb vom Home-Verzeichnisses liegen, einzubinden, bspw.


    /htdocs ist Homeverzeichnis
    /htdocs/pics Unterverzeichnis für Bilder
    /htdocs/misc CSS-Dateien usw.

    /private Verzeichnis für Klassen-Dateien


    Auf das pics-Verzeichnis kann aber jeder Benutzer zugreifen.
    Wie kann ich jetzt meine ach so wichtigen Word-Dokumente schützen?
    Ein Link ins private-Verzeichnis scheint nicht zu funktionieren (zumindest bei mir daheim mit IIS und WinXP).

  • #2
    Re: Verzeichnis-Sicherheit

    Original geschrieben von Stephan666
    Ein Link ins private-Verzeichnis scheint nicht zu funktionieren (zumindest bei mir daheim mit IIS und WinXP).
    der kann auch gar nicht funktionieren, wenn /htdocs das webroot ist.

    über den browser kannst du nur auf /htdocs und darunter liegende verzeichnisse zugreifen.

    du könntest aber deine dokumente in ein verzeichnis unterhalb von /htdocs ablegern, und dieses dann z.b. mit http-auth per .htaccess schützen ...
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      .htaccess ist doch nur unter Linux / Apache möglich, soweit ich weiss.

      Hab ich leider nicht zur Verfügung. Zumindest auf dem Webserver, den ich verwenden muss (kann ich leider nicht beeinflussen).

      Gibts da eigentlich was mit htaccess vergleichbares für Windows-Umgebungen auch?

      Kommentar


      • #4
        du kannst mittels php auf dateien oberhalb des webroot zugreifen und sie einlesen oder direkt zum download anbieten
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          ich weiss nicht ob ich das jetzt richtig verstanden hab.

          Ich kann eine Datei zum Download anbieten und mit dabei PHP einlesen, d.h. sie ist nur dann zum Download verfügbar, wenn ich sie eingelesen hab, richtig?

          Wie les ich die Datei ein, um das zu realisieren?

          Wenn ich weiterhin einen Link fürs Downloaden anbiete, müsste die Datei ja innerhalb vom webroot liegen oder reingeschrieben werden....

          Kann mir das mal einer bitte genauer beschreiben?

          Kommentar


          • #6
            du speicherst alle deine dateien um ordner /private

            dann machst du in ner datenbank einen eintrag für die datei und machst auf der seite, die die dateien auflistet ne abfrage an die datenbank, liest die dateinamen aus und generierst die links

            die links sollten so aussehen: download.php?id=<spalte id der tabelle inder datenbank>

            die download.php speicherst du unter /htdocs, so dass sie vom browser aus erreichbar ist

            in der download.php liest du den dateienamen aus, der zu $_GET['id'] (der übergebe parameter aus dem link) gehört und liest dann mit den dateifunktionen von, die im manual zu finden sind die datei aus
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              hm, mit fopen und fread die Datei auslesen ist okay. Die Links aus der Datenbank zu nehmen ist eigentlich gar nicht nötig.

              Aber wie kann man den Inhalt der Datei dann so ausgeben, dass das Dokument korrekt z.B. mit WinWord ausgegeben oder im Browser des Benutzers geöffnet wird?

              Kommen da diese COM-Support-Funktionen ins Spiel? Dann wäre das - wenn ichs mal unter Linux laufen lassen möchte - wieder schlecht.

              Kommentar


              • #8
                such mal (auch hier im forum) nach header download
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  d.h. der Link verweist dann auf ein Script ähnlich diesem:

                  PHP-Code:
                  header("Content-type: application/msword");

                  readfile("../private/doc.doc"); 

                  Kommentar


                  • #10
                    ja

                    der richtige content-type steht übrigens in $_FILES['name des uploadfeldes im formular']['type']
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      hat auch schon fast geklappt. Word wird geöffnet. Und meckert dann mit folgendem Fehler:

                      "Microsoft Word kann das angegebene Format nicht importieren.
                      Dieses Feature ist im Augenblick nicht installiert. Möchten Sie es jetzt installieren?"

                      Hier mal mein Quelltext:

                      PHP-Code:
                      header("Content-type: application/msword");

                      if (!isset(
                      $_GET["type"])){
                          include(
                      "./nixwars.php");
                          exit();
                      }

                      if (
                      $_GET["type"] == "1"){
                          
                      readfile("../private/1.doc");
                          exit();
                      }
                      elseif (
                      $_GET["type"] == "2"){
                          
                      readfile("../private/2.doc");
                          exit();
                      }
                      else{
                          include(
                      "./nixwars.php");
                          exit();

                      Ich schick dem Script per GET den Dokumentennamen mit.

                      Leider habsch grad meine original "Microsoft Office 2000 Premium CD" nicht zur Hand, um das fehlende Feature zu installieren und der Sache nachzugehen, sprich: nachzusehen, was dem WinWord fehlt.

                      Kommentar


                      • #12
                        aufruf?

                        mach den header mal raus und lass dir in den if zweigen ausgeben was er macht
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          hm, den Header ausgeben? Habs etwa mit
                          PHP-Code:
                          $header header("Content-type: application/msword");
                          echo 
                          $header
                          probiert, hatte ein leeres WordDoc zur Folge.

                          Verwende ich

                          $header = header();

                          meckert er wegen der fehlenden Argumente. Wie lass ich mir den ursprünglichen Header anzeigen??

                          Ich hab das "fehlende Feature" im WinWord jetzt drin.
                          Das richtige Dokument wurde danach mit dem falschen Dateinamen ausgegeben, etwa
                          "expensesform.php-1.doc" statt "Consultant************pensesform.doc"

                          Die Zahl im Dokumentennamen zählt er bei jedem Download um 1 hoch.

                          Kommentar


                          • #14
                            header()

                            da steht auch wie du das mit dem dateinamen hinkriegst
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #15
                              okay, danke! So einigermassen hab ich das hingekriegt. Ich hab des ganze von nem andern computer noch ausprobiert, da wollte auch WinWord nix weiter installieren und hat das Dokument anstandslos geöffnet. Scheint also hinzuhauen.

                              Wenn das Dokument direkt mit Word geöffnet wird anstatt gespeichert zu werden, konnt ich dem Word nicht abgewöhnen, den Dateinamen immer mit ner zahl zu versehen. Naja, wenn des Word unbedingt meint, nen besseren Dateinamen zu wissen als ich dann solls halt.

                              Das ist eher ein unwichtiges Detail.

                              Kommentar

                              Lädt...
                              X