Sicherheit bei Bild upload

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

  • Sicherheit bei Bild upload

    Volgendes problem, ich habe bei meinem Forum, wie bei allen Foren das ja so ist ein Avatar upload.
    Nur ist uns aufgefallen, das man dort auch pics hochladen kann in den Bösartiger Code versteckt ist.
    Wie kann man so eine Prüfung einbauen ob das pic (.gif, .jpg, .png) auch wirklich ein pic ist?

    Hier mal der code der Datei:
    PHP-Code:
    <?php
    if ($USER['id']!='' && $USER['id']!=0) {
     include_once(
    "login/inc.nav_user.php");
     if (isset(
    $_POST['action'])) $ACTION=$_POST['action'];
     else 
    $ACTION='view';

     if (
    $config['avatar_eod']!=&& $config['avatar_eod']!=2) {header 
    ("location: include.php?event=23&PHPKITSID=".session_id()); exit();}
     elseif (
    $ACTION==$_POST['cancel']) 
    {
    header("location: include.php?path=login/getavatar.php&PHPKITSID=".session_id()); exit();}
     elseif (isset(
    $_REQUEST['upload'])) {
      if(
    $ACTION==$_POST['upload_action'] && is_uploaded_file($_FILES['upload_pic']['tmp_name'])) {
       if (!
    $avatar_size=getimagesize($_FILES['upload_pic']['tmp_name'])) unset($avatar_size);
       else {
        if (
    $avatar_size[2]==1$ext='.gif';
        elseif (
    $avatar_size[2]==2$ext='.jpg';
        elseif (
    $avatar_size[2]==3$ext='.png';
        else unset(
    $ext);
        }

       if (isset(
    $ext) && isset($avatar_size)) {
        
    $filesize=$_FILES['upload_pic']['size'];
        
    $filename='avauser_'.$USER['id'].$ext;;

        if ((
    $config['avatar_height']<$avatar_size[1]) || ($config['avatar_width']<$avatar_size[0])) $error=1;
        elseif(
    $filesize<($config['avatar_size']*1024) && $filesize!=0) {
         
    $UPLOAD=new UPLOAD();
         
    $uploadreturned=$UPLOAD->images($_FILES['upload_pic'],$config['avatar_path'],$filename);
         if (
    $uploadreturned[0]==TRUE) {
          
    header("location: include.php?path=login/extoption.php&setavatar=".$filename."&PHPKITSID=".session_id()); exit();
          }
         else 
    $error=4;
         }
        else 
    $error=2;
        }
       else 
    $error=3;

       
    header("location: include.php?path=login/getavatar.php&upload&error=".$error."&PHPKITSID=".session_id()); exit();
       } 
      else {
       if (isset(
    $_REQUEST['error'])) $error=$_REQUEST['error'];
       if (
    $error==1) eval ("\$avatar_message= \"".getTemplate("getavatar_upload_error1")."\";");
       elseif (
    $error==2) eval ("\$avatar_message= \"".getTemplate("getavatar_upload_error2")."\";");
       elseif (
    $error==3) eval ("\$avatar_message= \"".getTemplate("getavatar_upload_error3")."\";");
       else eval (
    "\$avatar_message= \"".getTemplate("getavatar_upload_message")."\";");
       eval (
    "\$site_body.= \"".getTemplate("getavatar_upload")."\";");
       } 
      }
     else {
      
    $dir=$config['avatar_path'];
      
    $width=1;
      
    $row='odd';
      
    $a=opendir($dir);

      while (
    $datei=readdir($a)) {
       if (
    strstr($datei,"avatar") || ($USER['status']=='member' && strstr($datei,"avamember")) ||
    (
    $USER['status']=='mod' && (strstr($datei,"avamod") || strstr($datei,"avamember"))) || ($USER['status']=='admin' &&
    (
    strstr($datei,"avaadmin") || strstr($datei,"avamod") ||
    strstr($datei,"avamember")))) {
        if (
    $width==4) {
         eval (
    "\$avatar_list.= \"".getTemplate("getavatar_rowbreak")."\";");
         
    $width=1;
         
    $row=rowcolor($row);
         }
        if (!
    $avatar_dimension=@getimagesize($dir."/".$datei)) unset($avatar_dimension);
        eval (
    "\$avatar_list.= \"".getTemplate("getavatar_list")."\";");
        
    $width++;
        }
       }
      
    $cs=4-$width;
      if (
    $cs>0) eval ("\$avatar_list.= \"".getTemplate("getavatar_lastrow")."\";");
      
    closedir($a);

      if (
    $config['avatar_eod']==2) eval ("\$avatar_uploadlink= \"".getTemplate("getavatar_uploadlink")."\";");
      eval (
    "\$site_body.= \"".getTemplate("getavatar")."\";");
      }
     }
    else {
    header("location: include.php?event=1&PHPKITSID=".session_id()); exit();}
    ?>
    Zuletzt geändert von Musel; 04.07.2006, 11:17.

  • #2
    Ob ein Bild ein Bild ist, kannst du mit der von dir bereits verwendeten Funktion getimagesize prüfen.

    Ob das Bild als solches "böse" ist, sprich einen buffer overflow provoziert, ...: keine Chance (soweit ich weiß), aber dafür gibt's ja Fixes seitens der Browserhersteller


    P.S.
    Brich bitte deinen Beitrag so um, dass man nicht nach rechts scrollen muss (sonst mach ich das )
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar

    Lädt...
    X