Anti-Leech- Script Probleme bei Variablen

TripleM

Mitglied
Hallo erstmal!

Ich habe nach langer Suche ein "scheinbar" sehr einfaches OS-Script gefunden, das wirkungsvoll für Downloads den tatsächlichen Pfad der herunterzuladenden Datei versteckt, interessant für mich, da ich gerne ausgewählten Leuten Bilder-Links zuschicken möchte, diese jedoch nicht meine Verzeichnis-Strukturen durchschauen können und sich andere Bilder runterladen können sollen.

Hier erstmal das Script:

<?
/*
Copyright (c) 1999 Marcel Lemmen
E-mail: lemmen@support.nl
All rights reserved.

This code provided "As Is" with no warrantees express or implied.
The author and contributors are not liable for anything good or bad
that results from your use of this code.

You are free to distribute this for free provided this notice is included.
Please forward fixes/enhancements to the
author for inclusion in the next revision.

Usage:
Replace $files with the original with your files.
Replace $filenames with the filename people see when
downloading (CAN be different then file's!)
Replace $URL with your directory or the other URL.

That's all!

*/

$files=array('file1.zip','file2.zip');
$filenames=array('File1.zip','File2.zip');
$url="/home/lemmen/public_html/data/";
/* When the files are on another server, use the
whole address (http://www.server.com/dir/) in stead of /home/lemmen... */

$referer=ereg_replace("\?.","",$HTTP_REFERER);
$thisfile="http://$HTTP_HOST$PHP_SELF";

if ($referer!=$thisfile)
for ($i=0;$i<count($files);$i++)
echo "<P><A HREF=\"$PHP_SELF?$i\">",$filenames[$i],"</A>\n";

else {
$i=$QUERY_STRING;
$total=$url . $files[$i];
Header ("Content-Type: application/octet-stream");

Header ("Content-Length: ".filesize($total));
Header("Content-Disposition: attachment; filename=$filenames[$i]");

readfile($total);
}
?>

Das Ganze funktioniert so auch prima - aber was für mich sehr wichtig wäre, wäre, die Dateien/Dateinamen/Beschreibungen usw. nicht fix vorher eingeben zu müssen, sondern sozusagen eben mit dem Link zu verschicken. Ich dachte, das mache ich mit einem Link alá

"download.php?dateiname=bild.jpg&datum=25.12.04"

usw.
und rufe die übergebenen Werte mit GET ab und füge sie dann in das oben gepostete Script in den jeweiligen Arrays auf dem ersten Platz ein, z.B.

$files [0] = $dateiname;

anstatt der for i=0 bis irgendwas-Bedingung setze ich einfach überall das i=0.

So, und nun die Probleme: Wenn ich diese GET's und die Werte in die Arrays einlese BEVOR die if-Schleife startet und sie dann probehalber mit "echo" ausgebe, dann scheint alles super zu funktionieren. Der Link der Datei erscheint auch.

Wenn ich ihn dann aber anklicke, dann startet nicht der direkte Download der Datei (wie ursprünglich) sondern ich komme auf eine weitere Seite (ich schätze, das ist dann das, was die else-Bedingnung ist, wenn referer=thisfile wahr ist) und erst da kann ich dann einen weiteren Link anklicken, der den Download starten sollte -

download?0

aber nicht angezeigt wird.

Überhaupt bin ich am verzweifeln, hier stimmen dann auch die download-url und nichts mehr richtig. Und wenn ich versuche beim Ursprungsscript zuir Formatierung vorne und hinten eine head- und foot-Datei mit include reinzuholen, dann funkt das Script auch nicht mehr. Wo darf man da was ändern, wo nicht?

Kann mir jemand helfen, wie ich an dieses Script Parameter übergeben kann, ohne daß es lahm liegt? Oder weiß jemand ein anderes, das sowas (Link-Verschleierung und direktes Starten des Downloads beim Anklicken) schon sowieso beherrscht? Ich habe jetzt echt schon viele Seiten abgeklappert, PHPnet, PHPsource und wasweißichnichtnochalles, aber außer daß mir ständig genau solche Download-Links ins Gesicht springen, die genau das tun, was ich bräuchte, finde ich nirgendwo einen freien Quelltext zu dem Thema.

DANKE FÜR JEDE HILFE
 
Mal ganz nebenbei: das "surfen" in deinem Verzeichnis kann man deaktivieren mit einer .htaccess dazu ziehste am besten selfhtml.org um rat. Alternativ fügts halt in jedem Ordner ne index.html <<< das hindert halt 99% der unwissenden die nich wissen wie mand as umgeht.
 
Mhhhh, das mit .htaccess wußte ich schon. Bei mir ist Directory Browsing aber sowieso zentral deaktiviert. Außerdem:

Wenn jetzt aber einer von mir einen Bildlink z.B. "FotoserieSonnenschein1von5.jpg" kriegt, dann kann er daraufhin ja einfach mal rumprobieren und wird logischerweise durch direkte Eingabe der Url schnell auf die anderen Bilder stoßen.

Nicht gut also!

Danke für die Antwort, aber hat noch wer einen anderen Tipp?

Gruß!
 
Was ich genau will!?

Ich wäre schon sehr froh, wenn mir jemand weiterhelfen könnte, wie ich Variablen an dieses Script übergeben kann, ohne daß es nicht mehr funktioniert.

Alternativ dazu wäre ich für einen Link zu einem Freeware-Script dankbar das, wenn es schon nicht die Link-Adresse versteckt, so doch zumindest einen Link auf die Datei erzeugt, der die Datei direkt als download anbietet und nicht erst die Möglichkeiten "öffnen/öffnen mit/speichern/usw" anzeigt, ich will nämlich, daß die Dateien direkt runtergeladen werden.

Selber kann ich sowas noch nicht schreiben, bin ziemlicher PHP-Anfänger, daher weiß ich auch nicht, wie ich so ein Script realisieren könnte, egal mit oder ohne referer.

Mir helfen immer am meisten fertige Scripte anhand denen ich lernen, nachvollziehen und dann nachbearbeiten und anpassen kann.
 
Kauf dir n Buch über PHP, übe, lerne, verstehe, und dann wirst du keine Probleme damit haben, dir solch ein Script zu schreiben.
Das ist ein Hilfe-Forum, dessen Sinn es nicht ist, dir Links zu irgendwelchen fertigen Scripts zu geben, sondern Leuten zu helfen, die ein Problem mit ihrem Script haben.
 
Du bist vielleicht mal nett!

Danke recht schön auch.

Wenn Du meine Beiträge vielleicht richtig gelesen hättest, hättest Du vielleicht auch gesehen, daß ich nicht einfach nur ein fertiges Script wollte.

Ich beschäftige mich schon mit dem Thema, nur bin ich halt nicht der "Buchlese-und Auswendig-Lern"-Typ, sondern bringe mir Sachen viel eher und nachhaltiger learning by doing by. Da helfen mir Scripte in denen ich sehe, wie jemand etwas gelöst hat, um es dann zu vesrehen und selbst in anderer Weise dann anzuwenden. Daran finde ich nichts verwerfliches, es ist einfach eine andere art zu lernen.

Vielleicht hättest Du meinem Schreiben auch entnehmen können, daß ich mich sehr wohl mit dem thema meines problemes beschäftigt hatte - ich hätte jetzt aber im Moment gerne eine Lösung für ein Problem, das ich jetzt noch nicht lösen kann - im Groben verstehe ich das Script das ich gefunden habe, aber ich verstehe nicht, wo ich fehler mache, wenn ich etwas ähnliches realisieren will. Die Frage nach meinem fehler war die ursprüngliche Frage, die bitte um ein fertiges Script war nur die "notlösung" weil es eben schnell gehen muß und ich die Zeit gerade nicht habe.

es geht hier um eine spezielle Funktion wie's aussieht, der ich eben bisher noch nie begegnet bin. Und glaube mir, ich habe lange und ausgiebig nach Lösungen zum Selberprogrammieren gesucht (z.B. PHPtutorial, da stehen KEINE fertigen Scripts, sondern wie der Name schon sagt, ein Tutorial)!
Es gibt nunmal Leute im Netz, die ihre Lösungen gerne zur Verfügung stellen, man muß das Rad ja nicht ständig neu erfinden.

Oder die mir zumindest bei meinem ursprünglichen Problem (was mache ich bei der Parameterübergabe falsch) helfen wollen würden, ob sie es können oder nicht.

Sprüche wie Deine sind weder hilfreich, noch sonderlich tolerant, geschweige denn besonders nett.

Ich denke ich habe höflich gefragt - da hättest Du ja vielleicht mal gegenfragen können, wie zum Beispiel Deine Vorposter, wenn Du wirklich helfen wolltest, anstatt mich anzufahren.

Schön daß hier nicht alle so sind wie Du!
 
Es tut mir Leid, dass du dich jetzt angegriffen fühlst, aber deinen Postings nach zu urteilen kommt es einfach so rüber, als hättest du keine Ahnung von PHP und hättest dir irgendwo ein Script geholt, das nicht funktioniert. Und nun sollen andere Leute für dich den Fehler beheben, die aber eigentlich besseres zu tun hätten, nämlich Leuten zu helfen, die auch Hilfe nötig haben. Anscheinend hab ich das falsch interpretiert, und ich bitte vielmals um Entschuldigung.
Das Script funktioniert nicht, weil register_globals auf deinem Server offensichtlich aus ist.

Btw. das ist auch der Grund, warum ich dir empfehle, ein Buch zu kaufen: 99,99% der Scripte, die du so im Netz findest, sind absoluter Müll. Sie sind schlecht programmiert, so dass sie nicht funktionieren, oder haben einfach so einen graußamen Code-Stil, den man sich nicht aneignen sollte. Zumeist sind sie auch noch ziemlich unperformant. Deshalb sollte man solche Scripts nicht zum lernen benutzen. Die Leute, die Bücher über PHP schreiben, wissen (meist), wovon sie reden.
 
Ist ok.

Also ich denke schon, daß ich mit meiner Methode inzwischenr echt weit gekommen bin.

Habe wirklich das Problem bei Büchern über solche Themen, daß ich, ich weiß nicht wie ich's sagen soll, bei der trockenen Schreibweise (habe bei O'Reilley mal reingesehen, und ab einem bestimmten Punkt kam mir das Kotzen!, Aber auch andere sind "für mich" nicht besser) irgendwann das Gefühl habe, befehle, Befehle, Befehle hineingepaukt zu bekommen, und von den Zusammenhängen und der Logik sehr wenig zu kapieren. Mag ein Lerndefizit von mir sein.

Wenn ich aber ein Nachschlageregister und dazu ein Tutorial und dazu noch ein "recht einfach aussehendes Script" habe, dann komme ich immer sehr schnell dahinter, was was wie macht, und kann mir das dann auch gut merken, weil ich dann wenigstens kapiert habe, WOFÜR das Ding tut, was es tut. Irgendwie eine Macke von mir, ich geb's zu, aber ich habe schon gehört, daß es noch mehr solche Pragmatiker geben soll.

Nochmal zu dem Script:

ich glaube nicht, daß es an den register_globals liegt, in der phpinfo steht, die seien an, und ich habe bisher auch prinzipiell mit der Variablenübergabe keinerlei Probleme gehabt - ich sagte ja, daß ich mit GETdie Variablen einwandfrei übergeben konnte, bei einer testausgabe mit echo wurden sie ZUERST auch angezeigt, aber dann plötzlich nicht mehr. Also versuche ich nochmal, meine Frage zu konkretisieren:

ich denke, wo mein Problem bei dem Script mit dem Verstehen liegt ist da, wo sich das Script mit http_self nochmals selbst aufruft. irgendeiner hier schreibt auch, ich solle nicht mit dem http_referer arbeiten, aber der ist nunmal in dem Script drin!.

Genau das sind jedoch zwei Funktionen, zu denen ich nirgends eine brauchbare Erklärung gefunden habe, was die denn genau tun (auch mein PHPTutorial und PHPnet haben da versagt, auch mit google finde ich zu den Suchworten nichts brauchbares).

Ich verstehe schon recht gut, daß das Script aus den (festen) Arrays den Dateinamen, den Tarnnamen, die Dateibeschreibung ausliest, und eine url definiert wird wo die Datei denn nun liegt. Dann schreibt er mir das als Link hin, jedoch so verändert, daß da nicht ein klarer Pfad, sondern nur ein ?0 (zum Beispiel für den ersten Platz im Array= erste Datei) steht. Und wenn ich also auf diesen Link klicke, dann ersetzt er (ereg_replace) irgendwie das \?. des Links durch diesen http_referer - aber was ist das genau bitte? Auf jeden fall, wenn ich diesen Link anklicke, bietet er die Datei auch sofort ausschließlich zum Download an, ohne zu fragen "Wollen sie die Datei speichern blablabla" - ist das eine Eigenschaft von readfile? Auch dazu habe ich keine konkrete Erklärung gefunden. Naja, das ist aber was, was ich auch so rauskriegen dürfte.

Das Wichtigste ist mir: Zuerstmal funktioniert das Script ja prächtig! Erst wenn ich mit GET die Dateinamen/Bechreibung usw als Variable von einer anderen Seite via Link aus abhole, tut es nicht mehr. Der erste Teil sehr wohl noch, aber nach dem Anklicken der angezeigten Links nicht mehr - dann ist der Link verschwunden.

Ok, um das Ganze mal deutlich zu machen:

Unter diesem Link findest Du das Script, wie es funktionieren sollte:

http://www.lebensmue.de/download/antileech.php (Nur erste Datei anklicken, zweite existiert nicht)

Da ist das Script, wie ich es mir gedacht hätte, mit dem Fehler der passiert:

http://www.lebensmue.de/download/download.php?valid=123&target=file1.zip&expire=456&verify=789

Und hier sind beide Scripts zum Runterladen, um mir vielleicht erklären zu können, was genau ich falsch mache nach dem Einsetzen der zweiten Schleife:

http://www.lebensmue.de/download/scripts.zip

DANKE SCHÖN!
 
Zurück