Download serverseitig überwachen/kontrollieren

Status
Für weitere Antworten geschlossen.

Solitary Man

Well-known member
Download serverseitig überwachen/kontrollieren

Hallo.

Ich weißt nicht genau, ob sich das ganze mit php realisieren lässt; es müsste aber in diese Richtung gehen...:

Ich möchte einem Nutzer erlauben eine Datei einmalig von meinem Webspace herunterzuladen. Dazu soll überwacht werden, ob der Download gestartet, erfolgreich beendet oder fehlgeschlagen ist.

Hat jemand eine Idee, wie so etwas möglich ist ?

MfG Solitary Man
 
Hmm, du könntest die IP des Benutzers speichern, und wenn er mit der IP wieder laden möchte blockierst du das.
Doch das Problem ist das sich die IP fast immer ändert somit kannst du dich nicht darauf verlassen.
Und eine andere Information die du über den Nutzer speichern könntest, um das zu überprüfen kenne ich nicht.

Deshalb ist es schwer das zu verhindern.
Gibts keine andere Möglichkeit dein Problem zu lösen, ohne das man die DL-Anzahl beschränkt?
 
es gibt ne möglichkeit:

jeder user muss sich ein benutzerkonto anlegen und jedes konto darf die datei nur ein mal downloaden
klar kann sich ein user erneut registrieren, aber der aufwand ist eventuell manchen dann zu groß

ip bringt nichts, wie philipp schon sagt, die ändert sich bei jedem reconnect (spätestens alle 24h)
 
Es lässt sich nur über ein Benutzerkonto realisieren, dabei kannst du aber nur prüfen, wie oft derjenige den Download auch wirklich gedownloadet hat. Eine Statusinformation ala: "Benutzer brach Download bei 33% ab" ist in PHP nicht zu realisieren.

EIne Sperre nach X Downloads ist möglich, wenn du nen Codeschnipsel brauchst, geb dir gern meinen, mit dem ich sowas schon realisiert hab.

MfG thomo
 
Also das mit dem Bentutzerkonto habe ich mir auch schon überlegt...nur reicht mir das nicht so ganz, weil wenn ich z.B. eine Datei bereitstelle, die von einem bestimmten Nutzer nur einmal heruntergeladen werden darf habe ich trotzdem keine Sicherheit, dass die die Datei auch wirklich nur einmal heruntergeladen wird...

Warum das Ganze?
Wenn ich z.B. selbst produzierte Musik der Öffentlichkeit zugänglich machen will und diese als Datei zum Download bereitstelle, will ich sichergehen, dass die Musik von einem Nutzer nur einmal (evtl. bei Downloadschwierigkeiten gibts einen 2ten Versuch) heruntergeladen werden kann, weil sonst könnte der User den Link ja weitergeben...

Wäre es denn evtl. in einer anderen Sprache möglich, sowas zu realisieren ?

MfG Solitary Man
 
Wäre da nicht sinnvoller den link zeitlich zu begrenzen?
1tag oder 1 woche oder so^^

aber was ich nicht ganz verstehe
Öffentlichkeit zugänglich
User den Link ja weitergeben...
was willst du nun eigentlich?
entweder ihn kann jeder haben,
oder du verteilst ihn bloß per mail oder so an bestimmte leute, und da du willst das es niemand anders bekommt, begrenzt du "den link" so das es nichts bringen würde das er ihn weiter gibt o_0
 
Geb dir mal ein paar Zeilen Code von mir. Ich habe allerdings noch weitere Sachen gemacht, dazu aber gleich mehr:

PHP:
require_once('inc/config.inc.php');

if(isset($_POST['dl_submit'])){
$form_tk = $_POST['tk'];
$form_pw = $_POST['dl_pw'];

$res = mysql_query("SELECT * FROM <tabelle> WHERE dl_token='$form_tk'");
	while($row = mysql_fetch_array($res)) {
	$db_tk = $row["dl_token"];
	$db_pw = $row["password"];
	$can_download = $row["can_download"];
	$downloads = $row["downloads"]+1;
}

if($form_tk == $db_tk && $form_pw == $db_pw && $can_download == '1'){
mysql_query("UPDATE <tabelle> Set downloads = '$downloads' WHERE dl_token = '$form_tk'");
header("Location: http://www.domain.de/download/archive.rar");	
exit();
}

Auf meiner Website funktioniert das so:

Kunde entscheidet sich mein Produkt (welches es ausschließlich als Download gibt) zu kaufen, er füllt ein Formular aus (Name, Adresse, EMail usw).

Sobald er das Formular abgeschickt hat (und die Felder alle korrekt ausgefüllt sind), wird ein Download-Token sowie ein Passwort generiert. Das wird zusammen mit den restlichen Eingaben des Kunden in einer DB gespeichert. Dann bezahlt der Kunde (PayPal) und wird wieder auf meine Seite geleitet.

Wurde der korrekte Betrag gezahlt (Überprüfung ob das PayPal-Formular nicht manipuliert wurde => gaaaaanz wichtig!), bekommt er eine E-Mail mit seinem Download-Link und dem dazugehörigen Passwort. Er klickt nun den Link aus seiner MAil und muss das Passwort eingeben, stimmt das Passwort mit dem in der Db hinterlegten überein, wird der Download freigegeben.

Im obigen Script sind viele Codeteile entfernt, es dient auch nur der Anschauung und für Ideen.

Man könnte zB. die Anzahl der Downloads mitloggen und vor dem Download dann jeweils prüfen, ob noch gedownloadet werden kann.

Bsp: Ein weiteres Feld in der Tabelle mit dem Standard-Wert "0". Nach erfolgreichem Download ein Update des Feldes auf "1" und dann einfach vor der Downloadfreigabe prüfen, ob der Wert des Feldes 0 oder 1 ist, bei 0 darf er downloaden, bei 1 nicht.

Da du dir aber selber nicht ganz sicher bist, wie du es realisieren solltst, kann ich dir leider net wirklich was anderes anbieten.

Wenn du es nicht alleine kannst, programmier ich dir gern was passendes, allerdings nicht kostenlos. Preis würde sich nach Art und Umfang des Projektes richten.

Ansonsten ist die Hilfe hier im FSB natürlich for free, du musst dir einfach nur klar werden wie es realisiert werden soll. Vielleicht kannst du auch paar Angaben machen, ob du Erfahrung in PHP hast bzw wieviel.

Dann kann dir auch besser geholfen werden.

MfG thomo
 
@mpx2k: Klar kann ich mir den Aufwand sparen, nur muss ich dann mit erheblich mehr Traffic auf meinem Server rechnen und das sehe ich nicht ein. Ich werde diesen Aufwand nicht scheuen, aber derjenige muss sich noch entscheiden, ob er den Aufwand in Kauf nimmt, die Daten wieder bei RS oder so hochzuladen ;)

@thomo: Vielen Dank für den Quelltext und die Erklärung. Meine PHP/MySQL-Kenntnisse sollten ausreichen, sowas selbst zu programmieren (ich bin zwar kein Profi, aber Daten an eine Datenbank übergeben/ändern/löschen mit Formularen kann ich ziemlich gut).
Das Einzige was mich nur stört ist, dass es keine wirkliche Kontrolle gibt, ob eine Datei gedownloadet wird. Weil in deinem Beispiel könnte man den Downloadlink (archive.rar) einfach aus der heruntergeladenen Datei ablesen und diesen dann so oft nutzen wie man will...das läuft ja dann nicht über PHP/mySQL und ist damit nicht an ein Benutzerkonto gebunden.

Ich habe mir jetzt einen halben Nachmittag Gedanken gemacht, wie ich vllt mit htaccess bzw. mod_rewrite irgend etwas sinnvolles dazu basteln könnte, aber ich packs leider nicht. Die Zeitbeschränkung als Idee wäre auch nicht schlecht, allerdings bleibt dort das Problem, dass man trotzdem per Direktlink uneingeschränkten Zugriff auf die Datei hat.

Naja, danke für euere Hilfe, aber ich muss wohl passen. Für meine Wunschlösung gibt es scheinbar keinen Lösungsweg.

mfg Solitary Man
 
Das Einzige was mich nur stört ist, dass es keine wirkliche Kontrolle gibt, ob eine Datei gedownloadet wird. Weil in deinem Beispiel könnte man den Downloadlink (archive.rar) einfach aus der heruntergeladenen Datei ablesen und diesen dann so oft nutzen wie man will...

Kuck dir mal PHP: readfile - Manual an.
Mit readfile kannst du den Dateinamen ändern und vieles mehr.

Gruß
Broken Sword
 
@thomo:
Das Einzige was mich nur stört ist, dass es keine wirkliche Kontrolle gibt, ob eine Datei gedownloadet wird. Weil in deinem Beispiel könnte man den Downloadlink (archive.rar) einfach aus der heruntergeladenen Datei ablesen und diesen dann so oft nutzen wie man will...das läuft ja dann nicht über PHP/mySQL und ist damit nicht an ein Benutzerkonto gebunden.

Eben genau das kannst du nicht.

Erstell mal spasseshalber eine Datei namens download.php und setzt dort als einzigstes ein header("Location: http://www.domain.de/xyz.rar");

Du kannst den URL des header(); nicht auslesen :)

Kleiner Test gefällig?

Der kleine Test

Sag mir in welchem Verzeichnis das RAR-Archive liegt und du bekommst von mir 5€.

Das Einzigste was du siehst ist der Name der Datei, aber nicht den genauen URL Dieser!


Mit readfile kannst du den Dateinamen ändern und vieles mehr.

Eine Datei wird in PHP mit rename(); umbenannt, nicht mit readfile();

thomo
 
Das hatte ich zunächst auch gedacht, aber ich habe jetzt nochmal eine Testdatei erstellt und konnte die URL auslesen. Der Downloadlink zu deiner Datei müsste folgender sein:
Code:
http://www.tomdome.de/de/dasisteintestverzeichnis/archive.rar
Das Umbenennen mit PHP bringt auch nicht so wirklich was. Wenn mehrere Nutzer auf die gleiche Datei zugreifen, gibt das ein Chaos...

mfg Solitary Man
 
Der Downloadlink zu deiner Datei müsste folgender sein:
Code:
http://www.tomdome.de/de/dasisteintestverzeichnis/archive.rar


oO Das ist leider völlig korrekt! Wie zum Teufel hast du das auslesen können?

thomo

PS: Schick mir deine PayPal-Addi eben per PN, die 5,-€ für meine grosse Fresse bekommst du natürlich von mir xD
 
:D nee, lass mal, die 5 euro kannst du behalten ;)
Das Hackerprogramm, mit dem das geht, ist der Firefox (Version 3.0.5) :D
Einfach die Datei über den Link runterladen und dann muss du in dem Downloadfenster die Datei rechtsklicken und "Download-Link kopieren" auswählen und dann hast du den Direktlink zur Datei.

mfg Solitary Man
 
Meines Wissens geht das per mod_rewrite.
Allerdings kenn ich mich damit sehr schlecht aus, das heißt ich kanns lesen und verstehen aber nicht erklären oder selber schreiben.

Hier mal ein Tutorial zu Mod_Rewrite: modrewrite.de | mod_rewrite & .htaccess (Apache Server) oder das hier, wobei ich das erste besser fand: Mod_Rewrite Tutorial
Hier was offizielles von Apache: URL Rewriting Guide - Apache HTTP Server

mfg
snip3r

PS: Rapidshare macht das ähnlich.
 
Eine Datei wird in PHP mit rename(); umbenannt, nicht mit readfile();

Lesen bildet (auch an dich, Solitary Man!)

Natürlich sollte man die header()-Befehle, die im Beispiel aufgeführt werden beachten.
Mit
Code:
header("Content-Disposition: attachment; filename=\"peter.rar\";");
wird jede Datei als peter.rar an den Browser gesendet. Als "Quelle" wird die PHP-Datei angezeigt.

Gruß
Broken Sword

@thomo: omg... Natürlich sollte das nur ein Wink mit dem Zaunpfahl sein
 
Auch so wird im FF der korrekte Downloadlink bzw. der gesamte Pfad zur Datei angezeigt. Aber dank deines Hinweises habe ich nochmal ein bisschen gegoogelt und eine Lösung gefunden:

Code:
$file = 'pfad/verzeichnis/archive.rar';
header( 'Content-type: application/octet-stream' );
header( 'Content-Length: ' . filesize( $file ) );
$dateiname = basename( $file );
header( 'Content-Disposition: attachment; filename="' . $dateiname . '"' );
readfile( $file );

Das funktioniert (mein obiges Testbeispiel wurde entsprechend angepasst).

Gefunden bei PHPBAR

MfG thomo
 
ok, vielen vielen dank allesamt. das ist die lösung :)

:thx::thx::thx:

mfg solitary man
 
Status
Für weitere Antworten geschlossen.

Beliebte Schlagwörter

Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.

Zurück
Oben Unten