tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
461
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ThunderStorm1 ThunderStorm1 ist offline Mitglied Bronze
    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 
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Auf die Schnelle:
    item: Alle Variablen die an die DB weitergegeben werden mit mysql_escape_string() absichern
    PHP-Code:
    $abfrage_file="SELECT filename FROM downloads WHERE filename='".mysql_escape_string($file)."'"
    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)
     
    ---------------------------------------------------------------------------------------------------
    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

  3. #3
    Avatar von rd4eva
    rd4eva rd4eva ist offline Mitglied Brillant
    Registriert seit
    Feb 2003
    Beiträge
    756
    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.

  4. #4
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    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 ;-)

  5. #5
    ThunderStorm1 ThunderStorm1 ist offline Mitglied Bronze
    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 ?
     

  6. #6
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    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

  1. Download- Counter....
    Von Wollnashorn im Forum PHP
    Antworten: 9
    Letzter Beitrag: 05.03.08, 17:47
  2. Download-Counter
    Von forstar im Forum PHP
    Antworten: 4
    Letzter Beitrag: 16.03.06, 14:01
  3. Download Script Sicher?
    Von KristophS im Forum PHP
    Antworten: 6
    Letzter Beitrag: 16.06.04, 01:57
  4. HELP! download counter
    Von infinityloop im Forum PHP
    Antworten: 2
    Letzter Beitrag: 06.02.04, 20:03
  5. Antworten: 1
    Letzter Beitrag: 26.12.03, 14:54