Brauche eine Lösung, komme selber nicht mehr weiter

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Brauche eine Lösung, komme selber nicht mehr weiter

    Hallo miteinadner,

    ich habe bereits 43 seiten durchsucht hier im forum sowie im google imperium, wo ich erhofft habe eine lösung für mich zu finden, leider komme ich immer wieder zu "punkt a" zurück.

    Daher habe ich mich einfach mal Registriert und hoffe ein user kann mir weiterhelfen

    Ich habe ein Upload Script (filehosting) mit einem bekannten gecodet, es lag nun ca. 6 Monate auf cd und seit 1 woche sitze ich wieder aktiv drann.

    index.php = upload form
    succsess.php = Download / Löschlink ausgabe
    Uplaod / downlaod und der Rest vom Script arbeitet 100% fehlerfrei.


    Problem beschreibung:
    -----------------------------
    Uploade ich nun eine Datei, werde ich nach erfolgreichem upload auf die success.php weitergeleitet (redirect).

    hmm wie fange ich an zu erklären ... also ich versuchs einfach mal.


    Bei jedem Uplaod wird die ID in der Datenbank erhöht.
    PHP-Code:
    $qry="INSERT INTO ".$db->tb("fileinfo")."(idkey,deletepw,dir,mime_type,file_name,size,
    upload_time,expire_time,
    max_dwnld,recipient,sender) VALUES('
    $key','$delete_pw','$dirkey','".$uploader->getMediaType()."',
    '"
    .$uploader->getSavedFileName()."',
    "
    .$uploader->getMediaSize().",
    "
    .time().",".(time()+($maxtimeval*86400)).",
    "
    .$maxcountval.",'$emailto','$emailfrom')";
                
    $db->query($qry);
                
    $newid=$db->get_insert_id(); //id holen 
    nachdem der uplaod vollzogen ist und die index erfolgreich durchlaufen wurde, kommt die weiterleitung:

    PHP-Code:
    redirect("success.php?id=$newid"); 

    Nun zum "eigentlichen Problem":
    ------------------------------------------
    auf der succsess.php wird 1x der Download Link bereitgestellt und 1x der Löschlink.

    codeauszug:
    PHP-Code:
    //...
    $id=isset($_REQUEST["id"])?$_REQUEST["id"]:0;

    //Downloadlink
    $qry="SELECT idkey FROM ".$db->tb("fileinfo")." WHERE id='$id'";
    $db->query($qry);
    if(
    $db->getrownum()>0)
    {
        
    $row=$db->getrow();
        
    $link="<a href=\"download.php?id=".$row[0]."\" class=\"ltxt\">".HostURL()."download.php?id=".$row[0]."</a>";


    }
    else  
    $link="<span class=\"ltxt\"><font color=red>Fehler! der Link kann nicht angezeigt werden.</font><span>";
    $qry="SELECT idkey FROM ".$db->tb("fileinfo")." WHERE id='$id'";
    $db->query($qry); 
    beispiel aus der Adrersszeile: .../success.php?id=75

    Ich muss das "irgendwie" hinbekommen, das dieser Teil ".../success.php?id=75" irgendwie "verschlüsselt" wird, da jeder User einfach die ID ändern kann und so "fremde" uploads zb. löschen könnte, da sie succsess.php?id=xxx ja die downloadlinks bereit stellt.

    Habe da an cookies gedacht, die ich dem user übergebe und das nach einer zeit "zerstört" wird, aber auch hier könnte der user ein file hochladen zb 2kb, somit hat er ja noch ein gültiges cookie und er könnte ja dann wieder in den id=xxx "rumspielen"

    Daher dachte ich an Verschlüsselung. Das die id="verschlüsselter text" in der Browser URL steht.

    Ich bin absolut Ratlos wie ich das bewerkstelligen könnte, das die id zb. in der index.php verschlüsselt an die succsess.php übergeben wird.

    Ich danke allen im voraus für Antworten.
    MFG
    Zuletzt geändert von 7up!!; 08.03.2006, 11:24.

  • #2
    da fallen mir spontan 3 teilweise ganz simple Lösungswege ein:

    Variante A: Beim Upload speicherst du die IP von dem der das eingetragen hat. Man kann die Datei mit der ID xxx nur löschen wenn die IP übereinstimmt.

    (Hätte den Vorteil das du theoretisch sogar nachvollziehen kannst wer die da z.b. illegale files hochgeladen hat)

    Variante B: Du speicherst nur die Session ID und gibst das löschen von id-3 nur dann frei wenn session übereinstimmt (ähnlich Var A)

    Variante C: Der User kann seine Emailadresse angeben, an diese wird der Löschlink geschickt. Im "Löschlink" ist neben der ID auch noch ein zufällig (beim hochladen erzeugtes) Passwort mit dabei. So kann der User Jederzeit SEINE Bilder löschen.

    Fazit: Es wird kaum jemand seine Emailadresse mit angeben wollen, deshalb würd ich das nur als zusatz zu Var A oder B empfehlen.

    PS: Wenn du von Google indiziert werden willst benenne mal die Variable ID in der URL um.

    und nochwas .... Ändere mal deine Seitenbreite

    LG, Dani

    Kommentar


    • #3
      Hallo Danila,

      sry vieleicht habe ich mich eben falsch ausgedrückt, oder du hasst es flasch Verstanden.

      Ich möchte es so umsetzen das KEIN user "einfach so" auf die succsess.php kommt, so kann er auch auf keine fremden id's zugreifen indem er seine id zb: success.php?id=1008 in success.php?id=1007 ändert.

      Gedanke:1
      --------------
      Man(n) soll quasi nur auf die succsess kommen wenn zuvor ein file hochgeladen wurde aber dann soll halt die id oben in der adresszeile "gecryptet" sein - oder

      Gedanke:2
      --------------
      auf der index.php wird eine zufallszahl in md5 generiert.
      PHP-Code:
      //......
      $zzahl4 mt_rand(1,1000);
      $zzahl5 mt_rand(1,1000);
      $hash md5($zzahl4*$zzahl5);
      //.... 
      und dann so an den redirect ausführen:
      PHP-Code:
      redirect("success.php?id=$newid&hash=$hash"); 
      wiederum auf der success.php soll dann geprüft werden ob die "id" + "hash" übereinstimmt.

      wenn false dann umleiten auf index.php, bei true inhalt ausgeben.

      Ich denke so war es etwas verständlicher.



      EDIT
      --------------
      habe mal grad was getestet,
      ich gebe den generierten Hash an die success.php
      diese Prüft erstmal ob ein hash mit geschickt wurde.

      bei false wird index.php geladen.

      Nun soll gebrüft werden ob der hash exakt zu der id gehört, da hänge ich auch schon wieder fest, denn man kann auch einfach 1233456 als "angeblichen" hash nehmen und es wird bis jetzt auch nicht geprüft ob der hash zur id gehört.
      Könnte mir einer da weiter helfen ?



      PHP-Code:
      ///////////////test code anfang
      $id=isset($_REQUEST["id"])?$_REQUEST["id"]:0;
      $hash=isset($_REQUEST["hash"])?$_REQUEST["hash"]:"";
      if(!empty(
      $id) && !empty($hash))
      {
      $qry="SELECT file_name FROM ".$db->tb("fileinfo")." WHERE id=$id AND hash='".addslashes($_GET['hash'])."'";
          
      $db->query($qry);
          echo 
      'ok';
          }else{
          
      redirect("index.php");
          }
      //////////////test code ende 
      Zuletzt geändert von 7up!!; 08.03.2006, 13:13.

      Kommentar

      Lädt...
      X