Verzeichnisse nur für angemeldete (PHP) Nutzer freigeben

pesoi

Mitglied
Hi,lieber PHP-er

Diese Thema wurde schon mal hier besprochen aber keine vielversprechender Antwort gegeben.

Also ich habe eine geschutzte Bereich (PHP mit SESSION geschutzt.)

Ich möchte vermeiden das sich ein User, der sich schon mit PHP authentifiziert hat nochmal mittels Apache und dieser häßlichen Box identifizieren muss. Trotzdem möchte ich vermeiden das einfach auf die geschützten Verzeichnisinhalte zugegriffen werden können.

Ich habe jetzt die downloadlinks auf eine andere Verzeichnis umgeleitet,man sieht ja die richtige Link dann nicht mehr,(beim kopieren ist auch eine andere Link),aber wenn man über Firefox (in Optionen/downloads/)nachschaut steht die richtige Link in klartext da.Die Verzeichnis selbst ist schon mit eine Index.html geschutz aber nicht die Dateien.
Also deswegen möchte ich die Verzeichnis und die dateien für nicht autorisierte Benutzer speren.
Wenn ich in httpd.conf die Verzeichnis mit deny from all sperre dann kann keiner mehr die Dateien downloaden, auch nicht die eingelogte mitglieder.

Ich benutze: Apache 2.2.4 PHP 5.2.3 Windows XP Pro und habe volle Zugriff auf httpd.conf,php.ini, also volle Zugriff auf Server.

Wer kann mir Helfen?
 
Die einzige Möglichkeit, die mir dazu einfällt ist, das Verz. mit einer .htaccess bzw wie du schon gemacht hattest in der httpd.conf zu sperren.

Was nun kommt ist ein downloadscript in php, welches dir die Datei im Browser zum download anbietet. Musst halt nur die Funktion "header()" richtig nutzen, und bei den Browsern zw. IE und dem Rest unterscheiden. Beim IE ist oft ein "force-download" und/oder Contenttype "application/octet-stream" wichtig, um das Downloadfenster zu öffnen.

LG
Andy
 
danke andy

das war abe zugig.

Wie soll den die downloadscript in php aussehen.Wie soll das ganze Prozess aussehen?Heute ist ein schlechter Tag mit denken bei mir.

ich habe das so gemacht: #

httpd.conf
Code:
RewriteEngine On
RewriteRule ^/sperverzeichnis/patches/(.*)$	http://www.meineweb.com/down/sper/auth.php?requestedPath=$1&dir=patches [L]

auth.php
Code:
if($_GET['requestedPath']!="")
{

 $link="http://".$_SERVER['HTTP_HOST']."/sperverzeichnis_echt/".$_GET['dir']."/".$_GET['requestedPath'];

 header("Location:$link");
}
else
{
 //header("location:".LOGIN4_HREF);
}

wie soll ich das mit dem header machen?
 
Youhu-u-u-u-

und hier ist die Lösung:
httpd.conf
Code:
RewriteEngine On
RewriteRule ^/sperverzeichnis/irgendeineunterverzeichnis/(.*)$	http://www.meineweb.com/down/sper/auth.php?requestedPath=$1&dir=patches [L]

das kann natürlich auch in eine .htaccess eingefügt wenn keine Zugriff auf httpd.conf da ist.

auth.php
PHP:
<?php
session_start();
include('../config/conf.php');
if($_SESSION['istusereingelogt']==md5("userangelogt"))
{
if($_GET['requestedPath']!="")
{
 //$link="http://".$_SERVER['HTTP_HOST']."/sperverzeichnis_echt/".$_GET['dir']."/".$_GET['requestedPath'];
 $link="Laufwerkbuchstabe:/"."/sperverzeichnis_echt/".$_GET['dir']."/".$_GET['requestedPath'];
 $save_as_name=$_GET['requestedPath'];
 $len=filesize($link);
 header("Content-Type: application/octet-stream");
 header("Content-Disposition: attachment; filename=\"$save_as_name\"");
 header("Content-Length: $len");
 readfile($link);
}
else
{
 header("location:".LOGIN4_HREF); // irgendeine Fehlermeldung
}
}
else
{
 header("location:".LOGIN_HREF); // fehlermeldung
}

?>

Verzeichniss "sperverzeichnis_echt" befindet sich auserhalb Webordner und wird dann mit Deny for all gespert.

Also Problem gelöst.

PHP profi was sagt Ihr dazu? Ist das eine Lösung oder were noch etwas zu ergänzen?

Grüß aus Essen
 
Folgender Problemm habe ich jetzt.

Download lauf einwandfrei, aber wenn ich die // header("Content-Length: $len"); //
mitsenden lasse dann bekomme ich die Datei beschädigt.
Ohne die // header("Content-Length: $len"); // ist die download erfolgreich und die datei ist in Ordnung. habe es mit pdf und zip ausprobiert,beider das gleiche Problemm.

hier ein Auschnitt aus meine neue auth.php Script

PHP:
if($_GET['requestedPath']!="")
 {
  $link="D:/"."/sperverzeichnis_echt/".$_GET['dir']."/".$_GET['requestedPath'];
   if(is_file($link))
    {
     $save_as_name=$_GET['requestedPath'];
     $len=filesize($link);
     include ('../config/mime_funk.php');
     $type=mime_content_type($link);
     header("Content-Type: $type");
     header("Content-Disposition: attachment; filename=$save_as_name");
     header("Content-Length: $len"); 
     header("Pragma: no-cache"); 
     header("Expires: 0");
     readfile($link);
     exit;
    }
     else
     {
      header("location:".LOGIN4_HREF);
     }
 }
  else
  {
   header("location:".LOGIN4_HREF);
  }

Hat jemand eine Anung warum das so ist?
 
Guten morgen,
ein wunderschoner Tag Heute! Oder?

Gumbo.
Server setz mir aber keine Dateigrosse an. Er zeigt mir bei download große unbekant.
Das Problem habe ich eingetlich schon gelöst nur weis ich nicht ob das so eine gute Idee war. Ich habe gemerkt das beim umleiten von webserver werden noch um die 270 byte dazu gesendet.Wenn ich an die filesize() noch die 270 byte dazu addiere dann geht die download einwandfrei.
 
Eine weitere Problemm.

.exe dateien werden nicht mehr ausgeführt nach download.Es sieht so aus als als were die Datei beschädigt.

jemand eine Vorschlag?
 
Na Ja. Habe es schon selber der Fehler gefunden.

Man darf doch vor header() nix geschrieben haben. Das heist keine leerstellen,nix.
Bei mir war die Fehler bei include.

Jetzt lauft alles einwandfrei.

Danke an alle die mich unterstütz haben.

pesoi
 

Neue Beiträge

Zurück