Foros del Web » Programando para Internet » PHP »

Que consideraciones tomar para mi sistema de upload de imagenes ?

Estas en el tema de Que consideraciones tomar para mi sistema de upload de imagenes ? en el foro de PHP en Foros del Web. Hola gente tengo una pregunta. Arme un sistema de upload de imagenes, tanto de screenshot como imagenes de perfil, pero nose si es del todo ...
  #1 (permalink)  
Antiguo 29/01/2014, 13:03
 
Fecha de Ingreso: junio-2013
Ubicación: Mar del Plata
Mensajes: 122
Antigüedad: 10 años, 10 meses
Puntos: 0
Que consideraciones tomar para mi sistema de upload de imagenes ?

Hola gente tengo una pregunta.
Arme un sistema de upload de imagenes, tanto de screenshot como imagenes de perfil, pero nose si es del todo seguro, ya que nose si se podra o no subir archivos de otra extension como un shell, etc. En teoria no deberia pero al no saber mucho tal vez cometi algun error que si lo permite.

Esta es la classe upload a la cual llamo cuando debo subir un archivo.

Código:
<?  
if (basename($_SERVER["REQUEST_URI"]) === basename(__FILE__))  
{  
    exit();  
}  

class nwUpload extends conexao  
{  
    var $Size;  

    var $Directory;  
    var $Archive = "";  
    var $Name = "";  
	private $allowed=array("image/jpeg","image/gif","image/png");
    var $Pixels;  
    var $Reduce = true;  

    var $execQuery = false;  
    var $Dados = array();  

    var $Error = array();  

    function Check()  
    {  
        $this->Archive = isset($_FILES["arquivo"]) == true ? $_FILES["arquivo"] : false;  
        $get = getimagesize($this->Archive["tmp_name"]);  
          
        if (is_uploaded_file($this->Archive["tmp_name"]) == false)  
        {  
            $this->Error[] = "No fue posible enviar la imagen.";  
        }  
        if(!in_array($get["mime"], $this->allowed))  
        { 
            $this->Error[] = "Formato inv&aacute;lido.<br />La imagen debe estar en formato <strong>JPEG,GIF,PNG</strong>.";  
        }  
        if ($this->Archive["size"] > $this->Size)  
        {  
            $this->Error[] = "La imagen paso el limite de <strong>{$this->Size}(Bytes)</strong>";  
        }  
        return true;  
    }  

    function Send()  
    {  
        if ($this->Check() == true)  
        {  
            $this->Generate();  
        }  
    }  

    function Generate()  
    {  
        if (file_exists($this->Directory) == false)  
        {  
            $this->Error[] = "El direct&oacute;rio no existe.";  
        }  

        if (count($this->Error) > 0)  
        {  
            foreach ($this->Error as $Err)  
            {  
                echo("<blockquote class=\"error\">{$Err}<br /></blockquote>");  
                return false;  
            }  
        }  
        else  
        {  
            $get = getimagesize($this->Archive["tmp_name"]);
            switch($get["mime"]){
            case "image/jpeg":
                $Image = $this->Directory.$this->Name.".jpg"; 
                break;
            case "image/gif":
                $Image = $this->Directory.$this->Name.".gif"; 
                break;
            case "image/png":
                $Image = $this->Directory.$this->Name.".png";
                break;                
            default:
                $Image = $this->Directory.$this->Name.".jpg";
                break;
            }
            if ($this->Reduce == true)  
            {  
                $this->Collapse($this->Archive["tmp_name"], $Image, $this->Pixels);  
            }  
            else  
            {  
                move_uploaded_file($this->Archive["tmp_name"], $Image);  
            }  

            if ($this->execQuery == true)  
            {  
                $this->query("insert into wt_screens (author,votes,description,data) values ('{$this->Dados[1]}',0,'{$this->Dados[2]}',{$this->Dados[0]})");  
            }  
            echo("<blockquote class=\"success\">La imagen '<strong>{$this->Name}</strong>' fue enviada con exito.</blockquote>");  
            return true;  
        }  
    }  

    function Collapse($Name, $Image, $Pixels)  
    {  
        $get = getimagesize($Name);  

        $obj = explode(",", $Pixels);  
      
        $obj[0] = $obj[0];  
        $obj[1] = $obj[1];  
      
        $imgCreate = imagecreatetruecolor($obj[0], $obj[1]);
        switch($get["mime"]){
            case "image/jpeg":
                $ImageC = imagecreatefromjpeg($Name);
                imagecopyresampled($imgCreate, $ImageC, 0, 0, 0, 0, $obj[0], $obj[1], $get[0], $get[1]);
                return imagejpeg($imgCreate, $Image, 250);
            case "image/gif":
                $ImageC = imagecreatefromgif($Name);
                imagecopyresampled($imgCreate, $ImageC, 0, 0, 0, 0, $obj[0], $obj[1], $get[0], $get[1]);
                return imagegif($imgCreate, $Image, 250);
            case "image/png":
                $ImageC = imagecreatefrompng($Name);
                imagecopyresampled($imgCreate, $ImageC, 0, 0, 0, 0, $obj[0], $obj[1], $get[0], $get[1]);
                return imagepng($imgCreate, $Image, 9);
            default:
                $ImageC = imagecreatefromjpeg($Name);
                imagecopyresampled($imgCreate, $ImageC, 0, 0, 0, 0, $obj[0], $obj[1], $get[0], $get[1]);
                return imagejpeg($imgCreate, $Image, 250);
        }
        imagedestroy($ImageC);  
    }  
}  
?>
por ejemplo, en el modulo "add_img" hice algo como esto:

Código:
<?
if (anti_sql($_GET["exec"]) == true)
{
$funcoes->logado();
$funcoes->errospanel();
$funcoes->acc_char($_POST["charname"]);
$funcoes->so_vip(screenshot);

	$time = time();
	$char = $_POST["charname"];
	$login = $_COOKIE[cookie_login];
	$msg = anti_sql (base64_encode ($_POST["mensagem"]));

	require_once("modules/classes/upload.class.php");
	$upload = new nwUpload();

	$upload->Size = 2000000;

	$upload->Directory = "images/uploads/screens/";
	$upload->Name = strtoupper(md5($_POST["charname"].$time));

	$upload->Reduce = false;

	$conexao->query("insert into wt_screens (username,author,votes,description,data) values ('{$login}', '{$char}', 0, '{$msg}', {$time})");

	$upload->Send();
}
?>
Como ven estableci un tamaño, el tipo de extensiones, etc pero por lo que lei con tamper data y web developer que son dos extensiones de firefox se puede "alterar" esos filtros y subir archivos de otras extensiones
  #2 (permalink)  
Antiguo 29/01/2014, 17:22
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Que consideraciones tomar para mi sistema de upload de imagenes ?

Hay algunos tips que pueden serte de utilidad en: http://www.forosdelweb.com/f18/aport...8/#post4265376
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: imagenes, sistema, sql, tomar, upload
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:52.