Sicherer "Filemanager"

aargau

Erfahrenes Mitglied
Ich bin Betreiber einer Community. Nun arbeite ich seit einiger Zeit an einer neuen version. Ich möchte den usern ab der neuen Version die möglichkeit bieten kleine Daten im Privatenbereich Hochzuladen (ca. 10MB Speicher pro User)

Nun weis ich einfach nicht wie ich dies sicher lösen kann. Andere User sollten nicht auf die Daten kommen. Zusätzlich sollte kein Code ausgeführt werden können. Daher denke ich das sicher .php Dateien nicht erlaubt sind.

Nun die Frage an euch, wie würdet ihr dies am besten lösen? Ich brauche keine Fertigen Scripts sondern einfach Lösungsansätze, was ich unbedingt beachten muss.

Vielen Dank
 
Hmm, du köntest doch die Daten & .php Dateien in einem bestimmten Verzeichnis ablegen, dann könntest du das Verzeichnis im Apache (oder .htaccess Datei etc. weiß das nicht genau) so einstellen, das er die .php Dateien nicht durch den Parser jagd.
Das heißt soviel wie das .php ganz normal wie .txt Dateien angezeigt werden.


Andere Methode falls du dies nicht umsetzten kannst wäre, ganz einfach .php als .txt abzuspeichern, dies hätte den selben Effekt!
 
Zuletzt bearbeitet:
gut, das ist bestimmt schon mal eine gute idee, so schütze ich schonmal das Verzeichniss. WIe sieht es nun aus, das man die Datei irgend wie per PHP immer vom selben ort ladet, so das es eigentlich gar nicht möglich ist herauszufinden wo die Datei ist und diese bestimmt nur vom User Heruntergeladen werden kann?
 
Also, ich würde das so Regeln:
Der User lädt seine Datei über ein HTML Formular & mittels PHP hoch. Die Datei wird umbenannt in ein zufälligen aber eindeutigen&einmaligen Namen. Der Name dieser Datei wird zusammen mit dem alten Namen und dem User (dem Uploader) in der Datenbank gespeichert.

Nun kann der User über einen Link file.php?id=af584df6458hf236agh die Datei aufrufen, die id im Link ist der eindeutige Name, es wird in der Datenbank überprüft ob diese Datei von diesem User ist, wenn alles korrekt ist wird sie wieder in den Alten Namen, der in der Datenbank steht umbenannt.

Das Verzeichnis schützt du mittels .htaccess.
 
Vielen Dank, ich habe mir nun mal etwas zusammen gebastelt und würde gerne von euch wissen ob dies eine gute Lösung ist.

Der Ausgabe Code (Noch nicht Perfekt, einige Sicherheitseinschränkungen muss ich noch einbauen)

PHP:
function getfile($id){
 // Hier wird dann noch nach der UserID gefragt
$f= mysql_fetch_object(mysql_query("SELECT uploadedfile, newfile FROM filemanager WHERE id='$id'" )) ;
$altfile = $f->uploadedfile ; 
$newfile = $f->newfile ; 
$copy = "userupload/" ; 
copy($copy.$newfile, $altfile) ; 
header('Content-Disposition: attachment; filename='.$altfile.' ');
readfile($altfile);
}

Die Upload Datei verschiebd die Daten in ein geschütztes Verzeichniss, benennt sie um und speichert das ganze in eine Datenbank mit alt / neu namen.
 
Nun bin ich soweit durch (ob es sicher ist weis ich allerdings immer noch nicht)
Jedoch habe ich noch ein kleines Problem. Wenn ich z.B. ein Bild über diese Methode runterlade geht dies Problemlos. Bei einer exe allerdings wird die Datei beim Speichern als filename.exe.htm gespeichert und somit mit dem Browser geöffnet...
Woran liegt das?

Hier noch das Aktuelle Script:

file.php
PHP:
<?php
session_start() ; 
include("connect.php") ; 
function getfile($id){
$id = intval($_GET["id"]) ; 
$u_id =  $_SESSION["user_id"] ; 
$f= mysql_fetch_object(mysql_query("SELECT uploadedfile, newfile FROM".
."filemanager WHERE id='$id' AND userid = '$u_id' LIMIT 1")) ;
$altfile = $f->uploadedfile ; 
if($altfile) {
$newfile = $f->newfile ; 
$copy = "userupload/" ; 
header('Content-Disposition: attachment; filename='.$altfile.' ');
readfile($copy.$newfile);
} else {
echo "Fehler! Dieses File gibt es nicht" ; }}
getfile($id) ; 
?>
 
Zurück