Dateien aus DB auslesen - nur bei gültiger Session?
Daniel_Petratsch
- php
0 Juan0 Daniel_Petratsch0 Juan
Hi Leute!
Möglicherweise hat jemand von euch schon mal selbiges Problem gehabt und kann mir nun etwas weiterhelfen.
Ich habe einen Dateiupload in die DB (MySql + PHP) realisiert. Der eingeloggte User bekommt daraufhin eine Liste der enthaltenen Dateien und kann diese downloaden (die Dateien werden in einer Datei, die per Link aufgerufen wird direkt an den Browser ausgegeben):
Datei show_file.php (gekürzte Fassung)
Aufruf mit: show_file.php?id=xx&tablename=tabellenname
if(isset($_GET["id"]) && isset($_GET["tablename"]))
{
$sql = "SELECT dateiname, dateityp, dateigroesse_byte, daten FROM ".$_GET["tablename"]." WHERE id = ".$_GET["id"];
$erg = mysql_query($sql,$verbindung);
$result = mysql_fetch_assoc($erg);
header("Content-type: ".$result["dateityp"]);
header("Content-length: ".$result["dateigroesse_byte"]);
header("Content-Disposition: attachment; filename=".$result["dateiname"]);
//Ausgabe des Dateiinhaltes
echo $result["daten"];
}
Hier erfolgt die direkte Ausgabe an den Browser (funktioniert ganz prima).
Was nun aber leider nicht mehr funktioniert, ist die Sicherheit für eingeloggte Benutzer (PHP-Sessionbasiert auf Cookies). Es kann sich sonst jeder mit dem direkten Link den Download aufrufen.
Sobald ich an den Anfang der Datei show_file.php aber die aktuelle Session mit "session_start()" zu aktivieren versuche, funktioniert die heruntergeladene Datei nicht mehr(nur im IE).
Das Problem dürfte möglicherweise der Header sein, vielleicht hat "session_start()" einen ungewünschten Output an den Browser, der anschliessend die Ausgabe der Datei verwurstelt.
Hat jemand schon mal ähnliches Problem gehabt und wenn ja wie habt ihr das lösen können?
Vielen Dank!
freundliche Grüße,
Daniel Petratsch
Moin,
Das Problem dürfte möglicherweise der Header sein, vielleicht hat "session_start()" einen ungewünschten Output an den Browser, der anschliessend die Ausgabe der Datei verwurstelt.
vielleicht solltest du mit einem Zwischenschritt arbeiten.
Also, erst auf eine Datei springen, mit der du die Session startest und da entscheiden, ob der Download zulässig ist oder nicht.
Ist er zulässig, machst du mit header("Location:...) ein Redirect auf deine showfile.php, ist er nicht zulässig, kannst du z.B. ein Redirect auf eine Fehlerseite machen.
MfG,
Juan
Servus Juan,
Danke erstmal für die Hilfe.
vielleicht solltest du mit einem Zwischenschritt arbeiten.
Also, erst auf eine Datei springen, mit der du die Session startest und da entscheiden, ob der Download zulässig ist oder nicht.
Ist er zulässig, machst du mit header("Location:...) ein Redirect auf deine showfile.php, ist er nicht zulässig, kannst du z.B. ein Redirect auf eine Fehlerseite machen.
Der Zwischenschritt ist ja eigentlich schon die Datei in der die Links alle aufgeführt werden, die bekommt man nur wenn man eingeloggt ist, wenn ich jetzt nochmal einen Zwischenschritt einbaue ist die Problematik ja genau dieselbe oder (mit einem Schritt mehr halt)?
Man kann ja immer noch die showfile.php direkt in den Browser eingeben und bekommt ohne Probleme die Datei.
Irgendwie muss das doch gehen.
freundliche Grüße,
Daniel
Moin,
vielleicht solltest du mit einem Zwischenschritt arbeiten.
Also, erst auf eine Datei springen, mit der du die Session startest und da entscheiden, ob der Download zulässig ist oder nicht.
Ist er zulässig, machst du mit header("Location:...) ein Redirect auf deine showfile.php, ist er nicht zulässig, kannst du z.B. ein Redirect auf eine Fehlerseite machen.
mir fällt grad auf, dass das natürlich völliger Quatsch ist, denn es geht ja genau darum, dass du kein header mehr benutzen kannst, wenn du die session gestartet hast....
Wobei der Ansatz mit dem Zwischenschritt nicht so verkehrt ist :-)
Statt des Redirects kannst du nach der Überprüfung entweder den endgültigen Link zum Download ausgeben oder halt einfach einen Text, dass der Benutzer keine Erlaubnis zum Download hat.
MfG,
Juan