Benutzergruppen - wie sicher sind Downloads

qsrs

Erfahrenes Mitglied
Hallo,

arbeite an einem Script, welches u. a. auch Benutzergruppen beinhaltet. Manche User dürfen z.B. Dateien herunterladen, manche nicht. Wenn ein User, der die Berechtigung hat Dateien herunter zu laden den Dateilink an User weitergibt, die diese Berechtigungen nicht haben, können auch diese auf die Dateien zugreifen. D.h. eine Benutzerverwaltung ist insofern nicht sicher.

Oder übersehe ich hier eine Möglichkeit?
 
Du hast also die Moeglichkeit in der Datenbank eindeutig zu differenzieren wer downloaden darf und wer nicht, richtig?
Wie laeuft das mit dem Download? Sieht der berechtigte User den Link und der andere nicht?
Ist dieser Link ein richtiger Download-Link auf die Datei selbst oder auf ein weiteres Script welches dann den Download startet?
Wenn es ein weiteres Script sein sollte musst Du auch da einfach nur den Check einbauen ob der User denn berechtigt ist. Wenn nicht, dann schreib ein solches Script.
Ansonsten duerfte der Administrationsaufwand ein wenig hoch werden um dem FTP-Server die ganzen Nutzer anzulegen und so weiter. Falls Du dazu ueberhaupt die Moeglichkeit hast.
 
Im Moment sind es noch einfache Download-Links, die man auch sieht. Wenn ich allerdings ein weiteres Script erstelle, ist es dann nicht so, dass ich Javascript integrieren muss, um den Download dann automatisch zu starten? Spätestens dann habe ich das Problem, wenn Popups geblockt werden, dass ich wieder einen Download-Link zur Verfügung stellen muss. Und der wird dann wieder öffentlich.

Ist das falsch? Wenn ja, wie könnte das Script in etwa aussehen? Brauche nur ein paar Tips zur Umsetzung.

Vielen Dank schon mal für die Antwort.
 
Das geht meines Wissens nach auch ueber PHP, wie genau weiss ich jetzt nicht.
Ich glaub da wird die Datei durch den Server gestreamt.
 
Du brauchst kein JavaScript. Du legst Deine Downloaddateien in ein htaccess geschütztes Verzeichnis und schleust sie durch ein im öffentlichen Bereich liegendes Skript.
Ein kurzes Beispiel:
download.php
PHP:
if (empty($_GET['filename']) || 
    strpos($_GET['filename'],"\\")!==false || 
    strpos($_GET['filename'],"/")!==false || 
    strpos($_GET['filename'],"..")!==false )  {
    die('Sorry, Fehler bei Datenübergabe.');
}
$filename = $_GET['filename'];

//hier die Userprüfung

if (!$userHasEnoughRights)  {
    die('Sorry, Du hast nicht die Berechtigung, die Datei zu laden.');
}

if (!is_file("./geschuetztesVerzeichnis/".$filename)) {
    die('Sorry, Die angeforderte Datei existiert nicht.');
}

//mimeType anhand der Endung ermitteln.
//und in $mimeType Speichern
header("Content-Type: ".$mimeType."\n");
header("Content-Disposition:inline; filename=\"".$filename."\";");
readfile("./geschuetztesVerzeichnis/".$filename);

Gruß hpvw
 
Vielen Dank für die Antwort und das Script.

Eine Frage noch zum htaccess-Schutz. Müssen alle Gruppen in der htaccess-Datei bekannt sein? Oder ist dies nicht relevant?
 
Das Verzeichnis, in dem die Dateien liegen solltest Du per htaccess so schützen, dass niemand darauf Zugriff hat. Da htaccess nicht auf das lokale Dateisystem des Servers wirkt, hat das Skript Zugriff auf die Dateien, um sie durchzuschleusen.
Die Rechtekontrolle nimmst Du in dem Skript selbst vor (wo der entsprechende Kommentar steht). Das machst Du auf dieselbe Weise, wie Du auch in Deinen anderen Skripten auf dem Server die Rechte kontrollierst.
Ein Downloadlink würde also nicht auf die Datei selbst verweisen, sondern auf das Skript download.php:
HTML:
<a href="./download.php?filename=meinArchiv.zip">Download meinArchiv.zip</a>
Wenn Du freundlich bei den Experten im Webserver-Forum nachfragst, ließe sich auch ein Downloadlink realisieren, der direkt auf die Datei verweist und von einer mod_rewrite-Direktive in der htaccess-Datei von Apache intern auf das Downloadskript umgeleitet wird.

Gruß hpvw
 
ich weiß nicht, evtl klingt das blöd und heir ist vermutlich die falsche stelle das zu diskutieren, aber du solltest dir noch die frage stellen, was dir das bringen soll - willst du verhindern, das die ohne berechtigung an die datei kommen oder willst du nur nicht, das die dir trafic verursachen?

Bei letzterem ist das sicherlich von der idee her sinnvoll, bei ersterem nützt es nix, wenn du leute hast, die den link weitergeben würden, die geben auch die datei weiter (oder ihre einlog daten und dagegen kannst du kein script schreiben)

Im allgemeinen bist du bei sowas grundsätzlich auf die zusammenarbeit und die fairness etc. von denjenigen angewiesen, welche derartige rechte besitzen
 
@hpvw
Vielen Dank für deine ausführliche Erklärung. Werde ich so umsetzen.

@CoC
Stimmt. Das war auch meine ursprüngliche Frage, wie man es vermeiden kann, dass die Links weitergegeben werden. Aber ich denke mit der Lösung über das Download-Script ist das schon mal ein Ansatz es den Usern zumindest schwerer zu machen, an die Dateien heran zu kommen. Letztendlich kann ein User mit Download-Rechten die Datei auch Usern ohne Rechte einfach weitergeben. Ich möchte nur die Möglichkeiten innerhalb des Systems einschränken. Alles was außerhalb davon passiert wird sich niemals einschränken lassen.
 
CoC hat gesagt.:
ich weiß nicht, evtl klingt das blöd und heir ist vermutlich die falsche stelle das zu diskutieren, aber du solltest dir noch die frage stellen, was dir das bringen soll - willst du verhindern, das die ohne berechtigung an die datei kommen oder willst du nur nicht, das die dir trafic verursachen?

Bei letzterem ist das sicherlich von der idee her sinnvoll, bei ersterem nützt es nix, wenn du leute hast, die den link weitergeben würden, die geben auch die datei weiter (oder ihre einlog daten und dagegen kannst du kein script schreiben)

Im allgemeinen bist du bei sowas grundsätzlich auf die zusammenarbeit und die fairness etc. von denjenigen angewiesen, welche derartige rechte besitzen
Naja, wenn man nicht will, dass Dateien verbreitet werden, darf man sie prinzipiell nicht ins Internet stellen.
Traffic und "illegale" Downloads von der eigenen Seite kann man damit recht effektiv verhindern. Das Problem ist ja nicht, dass jemand privat Leuten, die er kennt, seinen Account gibt, oder die Datei selbst verschickt, sondern dass jemand einfach extern Links auf die Seite setzt. Fremden wird man selten einen Account mit Passwort geben.

Da die Links einer bestimmten Nutzergruppe vorbehalten sein sollen, würde ich ein gewisses Vertrauensverhältnis zum webmaster vorraussetzen, bevor ich jemandem diese Rechte gebe.

Aber auch für nicht spezielle Gruppen, kann man so einigermaßen erzwingen, dass Leute sich an der eigenen Seite anmelden, um den Download durchzuführen, denn oft kennen die zufällige Besucher keinen, der bereits angemeldet ist. Allerdings müsten die Downloads auch eine Anmeldung wert sein, sonst wird die seite wohl verwaisen.

Ein besserer Schutz, als eine solche oder ähnliche Umsetzung (konzeptionell), ist IMHO nur, die Seiten vom Netz zu nehmen, vorrausgesetzt, die Userprüfung ist ausreichend fälschungssicher.

Gruß hpvw
 
Zurück