Das PHP-Skript, das aufgerufen wird, liest eine Datei aus und sendet sie als Anhang zum Clienten zurück. Eine .htaccess-Datei ist überhaupt nicht vorhanden, deswegen wundere ich mich, warum dieser Fehler kommt. Über Google bin ich auch auf einige andere bplaced-Nutzer gestoßen, die den gleichen Fehler hatten, wo man allerdings damals keine Antwort gefunden hat. Falls jemand eine Idee hat, woran es liegen könnte, bitte melden.
Der Fehler kann sich auch darauf beziehen, dass das Script als solches “abkackt” und dann der Server nicht mehr weiter weiß, was zu tun wäre…und daher diesen Fehler ausgibt.
Um was für Vorgänge handelt es sich denn in dem Script?
Das Script ist variabel, es kann Parameter für die entsprechende Datei entgegen nehmen, also nicht nur bei einer, sondern bei allen im Verzeichnis.
Was mich wundert ist, dass ich in einem anderen Verzeichnis etwas ähnliches gemacht habe, das aber funktioniert.
Hier ist mal der entsprechende Quellcodeauszug:
if (isset($_GET['file'])) {
$dir = "userfiles/".$_SESSION['name']."/".$_GET['file'];
if (file_exists($dir)) {
header("Content-Type: "+mime_content_type($dir));
header("Content-Disposition: attachment; filename=\"".$_GET['file']."\"");
readfile($dir);
} else {
echo "Diese Datei existiert nicht.";
}
} else {
echo "Es ist ein unerwarteter Fehler aufgetreten. Es wurde kein Parameter übergeben!";
echo "<br>Bitte probieren Sie es später erneut!";
}
Also wird die Datei, die per GET-Parameter übergeben wird, heruntergeladen. Das ganze ist natürlich gesichert, ich hab den entsprechenden Abschnitt nur nicht mitgepostet.
Du benutzt zwar keine .htaccess-Datei, aber du veränderst den HTTP-Header. Bei den wenigen Zeilen hätte man auch ruhig immer ein wenig herausnehmen können, um zu sehen, wo der Fehler liegt.
Versuch mal:
header("Content-Type: ".mime_content_type($dir));
anstatt von
Super, klappt! Danke, ich dachte bisher, das man Strings wie auch in anderen Programmiersprachen mit einem “+” verknüpfen kann, anscheinend funktioniert das in PHP nicht.
Wegen der Sicherheit:
Bevor man die entsprechende PHP-Datei aufrufen kann, muss man sich anmelden, wenn man nicht angemeldet ist, wird automatisch auf die Anmeldeseite weitergeleitet(Ich arbeite mit Sessions). Die Dateien sind nicht direkt verlinkt, sondern nur über die PHP-Seite abrufbar, man müsste also wenn schon den Dateipfad raten. Allerdings werde ich das Verzeichnis dann später noch mit einer htaccess schützen. Im Moment habe ich das allerdings rausgelassen, da das ganze noch in der Entwicklung ist.
Wegen den String-Verknüpfungen: Jetzt weiß ich es ja!
Wegen der Sicherheit: Hab mittlerweile die htaccess eingebaut. Vielen Dank für das Stichwort “Path Traversal”, werd mich mal damit beschäftigen und hoffentlich eine Lösung dagegen finden!
EDIT: Kleine Frage, funktioniert dieses Path Traversal auch wenn z.B. so ein Dateipfad aufgerufen wird: test/tes2/…/…/…/test.xyz ?