ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
461
461
EMPFEHLEN
-
14.01.11 00:26 #1
- Registriert seit
- Jan 2010
- Beiträge
- 41
Mhh ich hoffe das ich eig alles abgehandel habe also von wegen RFI und LFI
PHP-Code:if (isset($_GET['file'])&& file_exists('Downloads/'.$_GET["file"].'') && !empty($_GET['file']))
{
$file=$_GET['file'];
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=".$file."");
readfile('http://www.julianb.de/Downloads/'.$file.'');
// Es wird überprüft ob die Datei schon in der DB vorhanden ist falls nicht wird sie hinzugefügt.
$abfrage_file="SELECT filename FROM downloads WHERE filename='$file'";
$erg_file=mysql_query($abfrage_file);
$if_file_exists_inDB=mysql_num_rows($erg_file);
if ($if_file_exists_inDB == 0)
{
$eintragen="INSERT INTO downloads
(filename,download_n)
VALUES
('{$file}','1')";
echo $eintragen;
mysql_query($eintragen) or die('Beim eintragen ist ein Fehler aufgetreten. <br /> Bitte kontaktieren sie denn Admin. <a href="mailto:admin@julianb.de?subject='.$_SERVER['SCRIPT_FILENAME'].'&body='."Fehler= ".$eintragen.'">Mail an Admin</a>').mysql_error();
}
else
{
$update_file="UPDATE downloads SET download_n = download_n + 1 WHERE filename='$file'";
mysql_query($update_file) or die('Es konnte kein Download gezählt werden. <br /> Bitte kontaktieren sie denn Admin. <a href="mailto:admin@julianb.de?subject='.$_SERVER['SCRIPT_FILENAME'].'&body='."Fehler= ".$eintragen.'">Mail an Admin</a>').mysql_error();
}
}
else
{
echo "Die angeforderte Datei existirt nicht !";
}
// Copyright © ThunderStorm 2011
-
Auf die Schnelle:
item: Alle Variablen die an die DB weitergegeben werden mit mysql_escape_string() absichern
item: Alle $_GET-Variablen mit filter_input() prüfen ob das kommt was erwartet wird. Also bei $_GET['file'] ein File-Name (zB. mit FILTER_VALIDATE_REGEXP)PHP-Code:$abfrage_file="SELECT filename FROM downloads WHERE filename='".mysql_escape_string($file)."'";
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Wenn man nur vom Code ausgeht und mal etwaige Serverkonfigurationen oder sonstige Direktiven aussen vor lässt, wüsste ich nicht was mich davon abhalten sollte Beispielsweise ?file=../.htaccess oder ?file=../fooBar.php zu machen.
Mal davon abgesehen:
Da du bei readfile eine Url angegeben hast nehme ich mal an das das du allow_url_fopen aktiviert hast. Das ist Grundsätzlich nicht die beste Idee.
Es ist sowieso nicht so richtig Sinnvoll da eine Url anzugeben da du dadurch einen neuen eigentlich unnötigen Request erzeugst.In order to understand recursion, one must first understand recursion.
-
14.01.11 10:17 #4
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.520
Kann da rd4eva nur beipflichten. Arbeite mit IDs, du hast ja ohnehin schon eine DB dafür. Und wenn du das nicht machen kannst/willst/darfst, dann wenigsten die DB-Abfrage <bevor> der Download geschickt wird. Dann wird wenigstens nur das downloadable, was in deiner DB steht und nicht jedes beliebige File, was evtl. auch durch Directory Traversal abgeholt werden kann.
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
14.01.11 17:45 #5
- Registriert seit
- Jan 2010
- Beiträge
- 41
Wie meinen ****
Meinst du das so ****
$abfrage_file="SELECT filename FROM downloads WHERE filename='$file'";
readfile('http://www.julianb.de/Downloads/'.$file.'');
Aber was sollte das bringen ?
-
14.01.11 18:13 #6
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.520
Den header() und readfile()-Teil am besten in den Block, in dem folgende Bedingung geprüft wird:
Code php:1
if ($if_file_exists_inDB == 0)
Dann wird der Download nur gestartet, wenn die Datei in deiner Datenbank eingetragen ist.Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
Ähnliche Themen
-
Download- Counter....
Von Wollnashorn im Forum PHPAntworten: 9Letzter Beitrag: 05.03.08, 17:47 -
Download-Counter
Von forstar im Forum PHPAntworten: 4Letzter Beitrag: 16.03.06, 14:01 -
Download Script Sicher?
Von KristophS im Forum PHPAntworten: 6Letzter Beitrag: 16.06.04, 01:57 -
HELP! download counter
Von infinityloop im Forum PHPAntworten: 2Letzter Beitrag: 06.02.04, 20:03 -
[NeedHelp] Download --- Protector + Counter
Von SilVa-G im Forum PHPAntworten: 1Letzter Beitrag: 26.12.03, 14:54





Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren